{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "【项目08】  电商打折套路解析\n",
    "\n",
    "作业要求\n",
    "1、从现有数据中，分析出“各个品牌都有多少商品参加了双十一活动？”\n",
    "要求：\n",
    "① 计算得到：商品总数、品牌总数\n",
    "② 双十一当天在售的商品占比情况（思考：是不是只有双十一当天在售的商品是“参与双十一活动的商品？”）\n",
    "③ 未参与双十一当天活动的商品，在双十一之后的去向如何？\n",
    "④ 真正参与双十一活动的品牌有哪些？其各个品牌参与双十一活动的商品数量分布是怎样的？\n",
    "   * 用bokeh绘制柱状图表示\n",
    "提示：\n",
    "① 数据的“id”字段为商品的实际唯一标识，“title”字段则为商品在网页上显示的名称\n",
    "   * 仔细看数据可以发现，同一个id的title不一定一样（双十一前后）\n",
    "② 数据的“店名”字段为品牌的唯一标识\n",
    "③ 按照商品销售节奏分类，我们可以将商品分为7类\n",
    "   A. 11.11前后及当天都在售 → 一直在售\n",
    "   B. 11.11之后停止销售 → 双十一后停止销售\n",
    "   C. 11.11开始销售并当天不停止 → 双十一当天上架并持续在售\n",
    "   D. 11.11开始销售且当天停止 → 仅双十一当天有售\n",
    "   E. 11.5 - 11.10 → 双十一前停止销售\n",
    "   F. 仅11.11当天停止销售 → 仅双十一当天停止销售\n",
    "   G. 11.12开始销售 → 双十一后上架\n",
    "④ 未参与双十一当天活动的商品，可能有四种情况：\n",
    "   con1 → 暂时下架（F）\n",
    "   con2 → 重新上架（E中部分数据，数据中同一个id可能有不同title，“换个马甲重新上架”），字符串查找特定字符 dataframe.str.contains('预售')\n",
    "   con3 → 预售（E中部分数据，预售商品的title中包含“预售”二字）\n",
    "   con4 → 彻底下架（E中部分数据），可忽略\n",
    "⑤ 真正参加活动的商品 = 双十一当天在售的商品 + 预售商品 （可以尝试结果去重）\n",
    "   通过上述几个指标计算，研究出哪些是真正参与双十一活动的品牌，且其商品数量是多少\n",
    "   \n",
    "2、哪些商品真的在打折呢？\n",
    "要求：\n",
    "① 针对每个商品，评估其打折的情况\n",
    "② 针对在打折的商品，其折扣率是多少\n",
    "   * 用bokeh绘制折线图：x轴为折扣率，y轴为商品数量\n",
    "③ 按照品牌分析，不同品牌的打折力度\n",
    "   * 用bokeh绘制浮动散点图，y坐标为品牌类型，x坐标为折扣力度\n",
    "提示：\n",
    "① 打折情况评估方法：\n",
    "   真打折：商品的价格在10天内有波动、双11价格为10天内最低价、不存在涨价现象\n",
    "   不打折：商品价格无变化\n",
    "② 针对每个商品做price字段的value值统计，查看价格是否有波动，可以先用pd.cut将date分为不同周期：'双十一前','双十一当天','双十一后'，得到period字段\n",
    "   data[['id','price','date']].groupby(['id','price']).min()\n",
    "   针对统计出来的结果，如果按照id和price分组仍只有一个唯一值，则说明价格未变，没打折；否则为打折\n",
    "③ 折扣率 = 双十一当天价格 / 双十一之前价格\n",
    "④ 作图过程中，清除掉折扣率大于95%的数据\n",
    "\n",
    "3、商家营销套路挖掘？\n",
    "要求：\n",
    "① 解析出不同品牌的参与打折商品比例及折扣力度，并做散点图，总结打折套路\n",
    "   * 用bokeh绘制散点图，x轴为参与打折商品比例，y轴为折扣力度，点的大小代表该品牌参加双11活动的商品总数\n",
    "提示：\n",
    "① 折扣力度为该品牌所有打折商品的折扣均值，这里去掉品牌中不打折的数据\n",
    "② 绘制散点图后，可以将x、y轴绘制均值辅助线，将绘图空间分为四个象限，基于该象限来总结套路\n",
    "\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "    <div class=\"bk-root\">\n",
       "        <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
       "        <span id=\"1001\">Loading BokehJS ...</span>\n",
       "    </div>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "\n",
       "(function(root) {\n",
       "  function now() {\n",
       "    return new Date();\n",
       "  }\n",
       "\n",
       "  var force = true;\n",
       "\n",
       "  if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
       "    root._bokeh_onload_callbacks = [];\n",
       "    root._bokeh_is_loading = undefined;\n",
       "  }\n",
       "\n",
       "  var JS_MIME_TYPE = 'application/javascript';\n",
       "  var HTML_MIME_TYPE = 'text/html';\n",
       "  var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
       "  var CLASS_NAME = 'output_bokeh rendered_html';\n",
       "\n",
       "  /**\n",
       "   * Render data to the DOM node\n",
       "   */\n",
       "  function render(props, node) {\n",
       "    var script = document.createElement(\"script\");\n",
       "    node.appendChild(script);\n",
       "  }\n",
       "\n",
       "  /**\n",
       "   * Handle when an output is cleared or removed\n",
       "   */\n",
       "  function handleClearOutput(event, handle) {\n",
       "    var cell = handle.cell;\n",
       "\n",
       "    var id = cell.output_area._bokeh_element_id;\n",
       "    var server_id = cell.output_area._bokeh_server_id;\n",
       "    // Clean up Bokeh references\n",
       "    if (id != null && id in Bokeh.index) {\n",
       "      Bokeh.index[id].model.document.clear();\n",
       "      delete Bokeh.index[id];\n",
       "    }\n",
       "\n",
       "    if (server_id !== undefined) {\n",
       "      // Clean up Bokeh references\n",
       "      var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
       "      cell.notebook.kernel.execute(cmd, {\n",
       "        iopub: {\n",
       "          output: function(msg) {\n",
       "            var id = msg.content.text.trim();\n",
       "            if (id in Bokeh.index) {\n",
       "              Bokeh.index[id].model.document.clear();\n",
       "              delete Bokeh.index[id];\n",
       "            }\n",
       "          }\n",
       "        }\n",
       "      });\n",
       "      // Destroy server and session\n",
       "      var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
       "      cell.notebook.kernel.execute(cmd);\n",
       "    }\n",
       "  }\n",
       "\n",
       "  /**\n",
       "   * Handle when a new output is added\n",
       "   */\n",
       "  function handleAddOutput(event, handle) {\n",
       "    var output_area = handle.output_area;\n",
       "    var output = handle.output;\n",
       "\n",
       "    // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
       "    if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n",
       "      return\n",
       "    }\n",
       "\n",
       "    var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
       "\n",
       "    if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
       "      toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
       "      // store reference to embed id on output_area\n",
       "      output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
       "    }\n",
       "    if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
       "      var bk_div = document.createElement(\"div\");\n",
       "      bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
       "      var script_attrs = bk_div.children[0].attributes;\n",
       "      for (var i = 0; i < script_attrs.length; i++) {\n",
       "        toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
       "      }\n",
       "      // store reference to server id on output_area\n",
       "      output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
       "    }\n",
       "  }\n",
       "\n",
       "  function register_renderer(events, OutputArea) {\n",
       "\n",
       "    function append_mime(data, metadata, element) {\n",
       "      // create a DOM node to render to\n",
       "      var toinsert = this.create_output_subarea(\n",
       "        metadata,\n",
       "        CLASS_NAME,\n",
       "        EXEC_MIME_TYPE\n",
       "      );\n",
       "      this.keyboard_manager.register_events(toinsert);\n",
       "      // Render to node\n",
       "      var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
       "      render(props, toinsert[toinsert.length - 1]);\n",
       "      element.append(toinsert);\n",
       "      return toinsert\n",
       "    }\n",
       "\n",
       "    /* Handle when an output is cleared or removed */\n",
       "    events.on('clear_output.CodeCell', handleClearOutput);\n",
       "    events.on('delete.Cell', handleClearOutput);\n",
       "\n",
       "    /* Handle when a new output is added */\n",
       "    events.on('output_added.OutputArea', handleAddOutput);\n",
       "\n",
       "    /**\n",
       "     * Register the mime type and append_mime function with output_area\n",
       "     */\n",
       "    OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
       "      /* Is output safe? */\n",
       "      safe: true,\n",
       "      /* Index of renderer in `output_area.display_order` */\n",
       "      index: 0\n",
       "    });\n",
       "  }\n",
       "\n",
       "  // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
       "  if (root.Jupyter !== undefined) {\n",
       "    var events = require('base/js/events');\n",
       "    var OutputArea = require('notebook/js/outputarea').OutputArea;\n",
       "\n",
       "    if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
       "      register_renderer(events, OutputArea);\n",
       "    }\n",
       "  }\n",
       "\n",
       "  \n",
       "  if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
       "    root._bokeh_timeout = Date.now() + 5000;\n",
       "    root._bokeh_failed_load = false;\n",
       "  }\n",
       "\n",
       "  var NB_LOAD_WARNING = {'data': {'text/html':\n",
       "     \"<div style='background-color: #fdd'>\\n\"+\n",
       "     \"<p>\\n\"+\n",
       "     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
       "     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
       "     \"</p>\\n\"+\n",
       "     \"<ul>\\n\"+\n",
       "     \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
       "     \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
       "     \"</ul>\\n\"+\n",
       "     \"<code>\\n\"+\n",
       "     \"from bokeh.resources import INLINE\\n\"+\n",
       "     \"output_notebook(resources=INLINE)\\n\"+\n",
       "     \"</code>\\n\"+\n",
       "     \"</div>\"}};\n",
       "\n",
       "  function display_loaded() {\n",
       "    var el = document.getElementById(\"1001\");\n",
       "    if (el != null) {\n",
       "      el.textContent = \"BokehJS is loading...\";\n",
       "    }\n",
       "    if (root.Bokeh !== undefined) {\n",
       "      if (el != null) {\n",
       "        el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
       "      }\n",
       "    } else if (Date.now() < root._bokeh_timeout) {\n",
       "      setTimeout(display_loaded, 100)\n",
       "    }\n",
       "  }\n",
       "\n",
       "\n",
       "  function run_callbacks() {\n",
       "    try {\n",
       "      root._bokeh_onload_callbacks.forEach(function(callback) {\n",
       "        if (callback != null)\n",
       "          callback();\n",
       "      });\n",
       "    } finally {\n",
       "      delete root._bokeh_onload_callbacks\n",
       "    }\n",
       "    console.debug(\"Bokeh: all callbacks have finished\");\n",
       "  }\n",
       "\n",
       "  function load_libs(css_urls, js_urls, callback) {\n",
       "    if (css_urls == null) css_urls = [];\n",
       "    if (js_urls == null) js_urls = [];\n",
       "\n",
       "    root._bokeh_onload_callbacks.push(callback);\n",
       "    if (root._bokeh_is_loading > 0) {\n",
       "      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
       "      return null;\n",
       "    }\n",
       "    if (js_urls == null || js_urls.length === 0) {\n",
       "      run_callbacks();\n",
       "      return null;\n",
       "    }\n",
       "    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
       "    root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
       "\n",
       "    function on_load() {\n",
       "      root._bokeh_is_loading--;\n",
       "      if (root._bokeh_is_loading === 0) {\n",
       "        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
       "        run_callbacks()\n",
       "      }\n",
       "    }\n",
       "\n",
       "    function on_error() {\n",
       "      console.error(\"failed to load \" + url);\n",
       "    }\n",
       "\n",
       "    for (var i = 0; i < css_urls.length; i++) {\n",
       "      var url = css_urls[i];\n",
       "      const element = document.createElement(\"link\");\n",
       "      element.onload = on_load;\n",
       "      element.onerror = on_error;\n",
       "      element.rel = \"stylesheet\";\n",
       "      element.type = \"text/css\";\n",
       "      element.href = url;\n",
       "      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
       "      document.body.appendChild(element);\n",
       "    }\n",
       "\n",
       "    for (var i = 0; i < js_urls.length; i++) {\n",
       "      var url = js_urls[i];\n",
       "      var element = document.createElement('script');\n",
       "      element.onload = on_load;\n",
       "      element.onerror = on_error;\n",
       "      element.async = false;\n",
       "      element.src = url;\n",
       "      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
       "      document.head.appendChild(element);\n",
       "    }\n",
       "  };var element = document.getElementById(\"1001\");\n",
       "  if (element == null) {\n",
       "    console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n",
       "    return false;\n",
       "  }\n",
       "\n",
       "  function inject_raw_css(css) {\n",
       "    const element = document.createElement(\"style\");\n",
       "    element.appendChild(document.createTextNode(css));\n",
       "    document.body.appendChild(element);\n",
       "  }\n",
       "\n",
       "  \n",
       "  var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n",
       "  var css_urls = [];\n",
       "  \n",
       "\n",
       "  var inline_js = [\n",
       "    function(Bokeh) {\n",
       "      Bokeh.set_log_level(\"info\");\n",
       "    },\n",
       "    function(Bokeh) {\n",
       "    \n",
       "    \n",
       "    }\n",
       "  ];\n",
       "\n",
       "  function run_inline_js() {\n",
       "    \n",
       "    if (root.Bokeh !== undefined || force === true) {\n",
       "      \n",
       "    for (var i = 0; i < inline_js.length; i++) {\n",
       "      inline_js[i].call(root, root.Bokeh);\n",
       "    }\n",
       "    if (force === true) {\n",
       "        display_loaded();\n",
       "      }} else if (Date.now() < root._bokeh_timeout) {\n",
       "      setTimeout(run_inline_js, 100);\n",
       "    } else if (!root._bokeh_failed_load) {\n",
       "      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
       "      root._bokeh_failed_load = true;\n",
       "    } else if (force !== true) {\n",
       "      var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n",
       "      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
       "    }\n",
       "\n",
       "  }\n",
       "\n",
       "  if (root._bokeh_is_loading === 0) {\n",
       "    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
       "    run_inline_js();\n",
       "  } else {\n",
       "    load_libs(css_urls, js_urls, function() {\n",
       "      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
       "      run_inline_js();\n",
       "    });\n",
       "  }\n",
       "}(window));"
      ],
      "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force = true;\n\n  if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n    root._bokeh_onload_callbacks = [];\n    root._bokeh_is_loading = undefined;\n  }\n\n  \n\n  \n  if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n    root._bokeh_timeout = Date.now() + 5000;\n    root._bokeh_failed_load = false;\n  }\n\n  var NB_LOAD_WARNING = {'data': {'text/html':\n     \"<div style='background-color: #fdd'>\\n\"+\n     \"<p>\\n\"+\n     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n     \"</p>\\n\"+\n     \"<ul>\\n\"+\n     \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n     \"<li>use INLINE resources instead, as so:</li>\\n\"+\n     \"</ul>\\n\"+\n     \"<code>\\n\"+\n     \"from bokeh.resources import INLINE\\n\"+\n     \"output_notebook(resources=INLINE)\\n\"+\n     \"</code>\\n\"+\n     \"</div>\"}};\n\n  function display_loaded() {\n    var el = document.getElementById(\"1001\");\n    if (el != null) {\n      el.textContent = \"BokehJS is loading...\";\n    }\n    if (root.Bokeh !== undefined) {\n      if (el != null) {\n        el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n      }\n    } else if (Date.now() < root._bokeh_timeout) {\n      setTimeout(display_loaded, 100)\n    }\n  }\n\n\n  function run_callbacks() {\n    try {\n      root._bokeh_onload_callbacks.forEach(function(callback) {\n        if (callback != null)\n          callback();\n      });\n    } finally {\n      delete root._bokeh_onload_callbacks\n    }\n    console.debug(\"Bokeh: all callbacks have finished\");\n  }\n\n  function load_libs(css_urls, js_urls, callback) {\n    if (css_urls == null) css_urls = [];\n    if (js_urls == null) js_urls = [];\n\n    root._bokeh_onload_callbacks.push(callback);\n    if (root._bokeh_is_loading > 0) {\n      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n      return null;\n    }\n    if (js_urls == null || js_urls.length === 0) {\n      run_callbacks();\n      return null;\n    }\n    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n    root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n    function on_load() {\n      root._bokeh_is_loading--;\n      if (root._bokeh_is_loading === 0) {\n        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n        run_callbacks()\n      }\n    }\n\n    function on_error() {\n      console.error(\"failed to load \" + url);\n    }\n\n    for (var i = 0; i < css_urls.length; i++) {\n      var url = css_urls[i];\n      const element = document.createElement(\"link\");\n      element.onload = on_load;\n      element.onerror = on_error;\n      element.rel = \"stylesheet\";\n      element.type = \"text/css\";\n      element.href = url;\n      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n      document.body.appendChild(element);\n    }\n\n    for (var i = 0; i < js_urls.length; i++) {\n      var url = js_urls[i];\n      var element = document.createElement('script');\n      element.onload = on_load;\n      element.onerror = on_error;\n      element.async = false;\n      element.src = url;\n      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n      document.head.appendChild(element);\n    }\n  };var element = document.getElementById(\"1001\");\n  if (element == null) {\n    console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n    return false;\n  }\n\n  function inject_raw_css(css) {\n    const element = document.createElement(\"style\");\n    element.appendChild(document.createTextNode(css));\n    document.body.appendChild(element);\n  }\n\n  \n  var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n  var css_urls = [];\n  \n\n  var inline_js = [\n    function(Bokeh) {\n      Bokeh.set_log_level(\"info\");\n    },\n    function(Bokeh) {\n    \n    \n    }\n  ];\n\n  function run_inline_js() {\n    \n    if (root.Bokeh !== undefined || force === true) {\n      \n    for (var i = 0; i < inline_js.length; i++) {\n      inline_js[i].call(root, root.Bokeh);\n    }\n    if (force === true) {\n        display_loaded();\n      }} else if (Date.now() < root._bokeh_timeout) {\n      setTimeout(run_inline_js, 100);\n    } else if (!root._bokeh_failed_load) {\n      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n      root._bokeh_failed_load = true;\n    } else if (force !== true) {\n      var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n    }\n\n  }\n\n  if (root._bokeh_is_loading === 0) {\n    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n    run_inline_js();\n  } else {\n    load_libs(css_urls, js_urls, function() {\n      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n      run_inline_js();\n    });\n  }\n}(window));"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore') \n",
    "# 不发出警告\n",
    "\n",
    "from bokeh.io import output_notebook\n",
    "output_notebook()\n",
    "# 导入notebook绘图模块\n",
    "\n",
    "from bokeh.plotting import figure,show\n",
    "from bokeh.models import ColumnDataSource\n",
    "# 导入图表绘制、图标展示模块\n",
    "# 导入ColumnDataSource模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"\\n1、从现有数据中，分析出“各个品牌都有多少商品参加了双十一活动？”\\n要求：\\n① 计算得到：商品总数、品牌总数\\n② 双十一当天在售的商品占比情况（思考：是不是只有双十一当天在售的商品是“参与双十一活动的商品？”）\\n③ 未参与双十一当天活动的商品，在双十一之后的去向如何？\\n④ 真正参与双十一活动的品牌有哪些？其各个品牌参与双十一活动的商品数量分布是怎样的？\\n   * 用bokeh绘制柱状图表示\\n提示：\\n① 数据的“id”字段为商品的实际唯一标识，“title”字段则为商品在网页上显示的名称\\n   * 仔细看数据可以发现，同一个id的title不一定一样（双十一前后）\\n② 数据的“店名”字段为品牌的唯一标识\\n③ 按照商品销售节奏分类，我们可以将商品分为7类\\n   A. 11.11前后及当天都在售 → 一直在售\\n   B. 11.11之后停止销售 → 双十一后停止销售\\n   C. 11.11开始销售并当天不停止 → 双十一当天上架并持续在售\\n   D. 11.11开始销售且当天停止 → 仅双十一当天有售\\n   E. 11.5 - 11.10 → 双十一前停止销售\\n   F. 仅11.11当天停止销售 → 仅双十一当天停止销售\\n   G. 11.12开始销售 → 双十一后上架\\n④ 未参与双十一当天活动的商品，可能有四种情况：\\n   con1 → 暂时下架（F）\\n   con2 → 重新上架（E中部分数据，数据中同一个id可能有不同title，“换个马甲重新上架”），字符串查找特定字符 dataframe.str.contains('预售')\\n   con3 → 预售（E中部分数据，预售商品的title中包含“预售”二字）\\n   con4 → 彻底下架（E中部分数据），可忽略\\n⑤ 真正参加活动的商品 = 双十一当天在售的商品 + 预售商品 （可以尝试结果去重）\\n   通过上述几个指标计算，研究出哪些是真正参与双十一活动的品牌，且其商品数量是多少\\n\\n\""
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "'''\n",
    "1、从现有数据中，分析出“各个品牌都有多少商品参加了双十一活动？”\n",
    "要求：\n",
    "① 计算得到：商品总数、品牌总数\n",
    "② 双十一当天在售的商品占比情况（思考：是不是只有双十一当天在售的商品是“参与双十一活动的商品？”）\n",
    "③ 未参与双十一当天活动的商品，在双十一之后的去向如何？\n",
    "④ 真正参与双十一活动的品牌有哪些？其各个品牌参与双十一活动的商品数量分布是怎样的？\n",
    "   * 用bokeh绘制柱状图表示\n",
    "提示：\n",
    "① 数据的“id”字段为商品的实际唯一标识，“title”字段则为商品在网页上显示的名称\n",
    "   * 仔细看数据可以发现，同一个id的title不一定一样（双十一前后）\n",
    "② 数据的“店名”字段为品牌的唯一标识\n",
    "③ 按照商品销售节奏分类，我们可以将商品分为7类\n",
    "   A. 11.11前后及当天都在售 → 一直在售\n",
    "   B. 11.11之后停止销售 → 双十一后停止销售\n",
    "   C. 11.11开始销售并当天不停止 → 双十一当天上架并持续在售\n",
    "   D. 11.11开始销售且当天停止 → 仅双十一当天有售\n",
    "   E. 11.5 - 11.10 → 双十一前停止销售\n",
    "   F. 仅11.11当天停止销售 → 仅双十一当天停止销售\n",
    "   G. 11.12开始销售 → 双十一后上架\n",
    "④ 未参与双十一当天活动的商品，可能有四种情况：\n",
    "   con1 → 暂时下架（F）\n",
    "   con2 → 重新上架（E中部分数据，数据中同一个id可能有不同title，“换个马甲重新上架”），字符串查找特定字符 dataframe.str.contains('预售')\n",
    "   con3 → 预售（E中部分数据，预售商品的title中包含“预售”二字）\n",
    "   con4 → 彻底下架（E中部分数据），可忽略\n",
    "⑤ 真正参加活动的商品 = 双十一当天在售的商品 + 预售商品 （可以尝试结果去重）\n",
    "   通过上述几个指标计算，研究出哪些是真正参与双十一活动的品牌，且其商品数量是多少\n",
    "\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "read_excel() got an unexpected keyword argument `sheetname`",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-6-bf38010ac9d8>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[1;31m# 创建工作路径\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[0mdf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread_excel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'双十一淘宝美妆数据.xlsx'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0msheetname\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mheader\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mindex_col\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      7\u001b[0m \u001b[0mdf_length\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      8\u001b[0m \u001b[0mdf_columns\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtolist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\excel\\_base.py\u001b[0m in \u001b[0;36mread_excel\u001b[1;34m(io, sheet_name, header, names, index_col, usecols, squeeze, dtype, engine, converters, true_values, false_values, skiprows, nrows, na_values, keep_default_na, verbose, parse_dates, date_parser, thousands, comment, skipfooter, convert_float, mangle_dupe_cols, **kwds)\u001b[0m\n\u001b[0;32m    299\u001b[0m     \u001b[1;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m\"sheet\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"sheetname\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"parse_cols\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    300\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0marg\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 301\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mf\"read_excel() got an unexpected keyword argument `{arg}`\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    302\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    303\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mio\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mExcelFile\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mTypeError\u001b[0m: read_excel() got an unexpected keyword argument `sheetname`"
     ]
    }
   ],
   "source": [
    "# 查看数据, 计算商品总数、品牌总数\n",
    "\n",
    "import os\n",
    "# 创建工作路径\n",
    "\n",
    "df = pd.read_excel('双十一淘宝美妆数据.xlsx',sheetname=0,header=0,index_col=0)\n",
    "df_length = len(df)\n",
    "df_columns = df.columns.tolist()\n",
    "df.fillna(0,inplace = True)   # 填充缺失值\n",
    "df['date'] = df.index.day     # 提取销售日期\n",
    "print('数据量为%i条' % len(df))\n",
    "print('数据时间周期为：\\n', df.index.unique())\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "商品总数为3502个\n",
      "-------\n",
      "双十一当天参与活动的商品总数为2335个，占比为66.68%\n",
      "-------\n",
      "品牌总数为22个\n",
      " ['相宜本草' '佰草集' '欧莱雅' '美宝莲' '玉兰油' '蜜丝佛陀' '悦诗风吟' 'SKII' '兰芝' '妮维雅' '自然堂' '倩碧'\n",
      " '欧珀莱' '美加净' '雅诗兰黛' '资生堂' '兰蔻' '雅漾' '雪花秀' '植村秀' '薇姿' '娇兰']\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "A    1820\n",
       "C      39\n",
       "B     458\n",
       "D      18\n",
       "E     841\n",
       "F     242\n",
       "G      84\n",
       "Name: type, dtype: int64"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bfc0940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 双十一当天在售的商品占比情况\n",
    "# 按照商品销售节奏分类，我们可以将商品分为7类\n",
    "#   A. 11.11前后及当天都在售 → 一直在售\n",
    "#   B. 11.11之后停止销售 → 双十一后停止销售\n",
    "#   C. 11.11开始销售并当天不停止 → 双十一当天上架并持续在售\n",
    "#   D. 11.11开始销售且当天停止 → 仅双十一当天有售\n",
    "#   E. 11.5 - 11.10 → 双十一前停止销售\n",
    "#   F. 仅11.11当天停止销售 → 仅双十一当天停止销售\n",
    "#   G. 11.12开始销售 → 双十一后上架\n",
    "\n",
    "data1 = df[['id','title','店名','date']]\n",
    "#print(data1.head())\n",
    "# 筛选数据\n",
    "\n",
    "d1 = data1[['id','date']].groupby(by = 'id').agg(['min','max'])['date']  \n",
    "# 统计不同商品的销售开始日期、截止日期\n",
    "\n",
    "id_11 = data1[data1['date']==11]['id'].unique()\n",
    "d2 = pd.DataFrame({'id':id_11,'双十一当天是否售卖':True})\n",
    "# 筛选双十一当天售卖的商品id\n",
    "\n",
    "id_date = pd.merge(d1,d2,left_index=True,right_on='id',how = 'left')\n",
    "id_date['双十一当天是否售卖'][id_date['双十一当天是否售卖']!=True] = False\n",
    "#print(id_date.head())\n",
    "# 合并数据\n",
    "\n",
    "m = len(data1['id'].unique())\n",
    "m_11 = len(id_11)\n",
    "m_11_pre = m_11/m\n",
    "print('商品总数为%i个\\n-------' % m)\n",
    "print('双十一当天参与活动的商品总数为%i个，占比为%.2f%%\\n-------' % (m_11,m_11_pre*100))\n",
    "print('品牌总数为%i个\\n' % len(data1['店名'].unique()),data1['店名'].unique())\n",
    "# 统计\n",
    "\n",
    "id_date['type'] = '待分类'\n",
    "id_date['type'][(id_date['min'] <11)&(id_date['max']>11)] = 'A'      #  A类：11.11前后及当天都在售 → 一直在售\n",
    "id_date['type'][(id_date['min'] <11)&(id_date['max']==11)] = 'B'     #  B类：11.11之后停止销售 → 双十一后停止销售\n",
    "id_date['type'][(id_date['min'] ==11)&(id_date['max']>11)] = 'C'     #  C类：11.11开始销售并当天不停止 → 双十一当天上架并持续在售\n",
    "id_date['type'][(id_date['min'] ==11)&(id_date['max']==11)] = 'D'    #  D类：11.11开始销售且当天停止 → 仅双十一当天有售\n",
    "id_date['type'][id_date['双十一当天是否售卖']== False] = 'F'         #  F类：仅11.11当天停止销售 → 仅双十一当天停止销售\n",
    "id_date['type'][id_date['max']<11] = 'E'                             #  E类：11.5 - 11.10 → 双十一前停止销售\n",
    "id_date['type'][id_date['min'] >11] = 'G'                            #  G类：11.11之后开始销售 → 双十一后上架\n",
    "# 商品销售节奏分类\n",
    "\n",
    "result1 = id_date['type'].value_counts()\n",
    "result1 = result1.loc[['A','C','B','D','E','F','G']]  # 调整顺序\n",
    "# 计算不同类别的商品数量\n",
    "\n",
    "from bokeh.palettes import brewer\n",
    "colori = brewer['YlGn'][7]\n",
    "# 设置调色盘\n",
    "\n",
    "plt.axis('equal')  # 保证长宽相等\n",
    "plt.pie(result1,labels = result1.index, autopct='%.2f%%',pctdistance=0.8,labeldistance =1.1,\n",
    "        startangle=90, radius=1.5,counterclock=False, colors = colori)\n",
    "# 绘制饼图\n",
    "\n",
    "result1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "双十一当天没参加活动的商品总数为1167个，占比为33.32%\n",
      "-------\n",
      "双十一当天没参加活动的商品销售节奏类别为：\n",
      " ['E', 'F', 'G']\n",
      "------\n",
      "未参与双十一当天活动的商品中：\n",
      "暂时下架商品的数量为242个，重新上架商品的数据量为110个，预售商品的数据量为453个\n"
     ]
    }
   ],
   "source": [
    "# 未参与双十一当天活动的商品，在双十一之后的去向如何？\n",
    "#   con1 → 暂时下架（F）\n",
    "#   con2 → 重新上架（E中部分数据，数据中同一个id可能有不同title，“换个马甲重新上架”）\n",
    "#   con3 → 预售（E中部分数据，预售商品的title中包含“预售”二字），字符串查找特定字符 dataframe.str.contains('预售')\n",
    "#   con4 → 彻底下架（E中部分数据），可忽略\n",
    "\n",
    "id_not11 = id_date[id_date['双十一当天是否售卖']==False]  # 筛选出双十一当天没参加活动的产品id\n",
    "print('双十一当天没参加活动的商品总数为%i个，占比为%.2f%%\\n-------' % (len(id_not11),len(id_not11)/m*100))\n",
    "print('双十一当天没参加活动的商品销售节奏类别为：\\n',id_not11['type'].value_counts().index.tolist())\n",
    "print('------')\n",
    "# 找到未参与双十一当天活动的商品id\n",
    "\n",
    "df_not11 = id_not11[['id','type']]\n",
    "data_not11 = pd.merge(df_not11,df,on = 'id', how = 'left')\n",
    "# 筛选出未参与双十一当天活动商品id对应的原始数据\n",
    "\n",
    "id_con1 = id_date['id'][id_date['type'] == 'F'].values\n",
    "# 筛选出con1的商品id\n",
    "# con1 → 暂时下架（F）\n",
    "\n",
    "data_con2 = data_not11[['id','title','date']].groupby(by = ['id','title']).count()   # 按照id和title分组（找到id和title一对多的情况）\n",
    "title_count = data_con2.reset_index()['id'].value_counts()   # 计算id出现的次数，如果出现次数大于1，则说明该商品是更改了title的\n",
    "id_con2 = title_count[title_count>1].index\n",
    "# 筛选出con2的商品id\n",
    "# con2 → 重新上架（E中部分数据，数据中同一个id可能有不同title，“换个马甲重新上架”）\n",
    "\n",
    "data_con3 = data_not11[data_not11['title'].str.contains('预售')]   # 筛选出title中含有“预售”二字的数据\n",
    "id_con3 = data_con3['id'].value_counts().index     \n",
    "# 筛选出con3的商品id\n",
    "# con3 → 预售（E中部分数据，预售商品的title中包含“预售”二字）\n",
    "\n",
    "print(\"未参与双十一当天活动的商品中：\\n暂时下架商品的数量为%i个，重新上架商品的数据量为%i个，预售商品的数据量为%i个\" \n",
    "      % (len(id_con1), len(id_con2), len(id_con3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "商品总数为3502个\n",
      "真正参加活动的商品商品总数为2788个，占比为79.61%\n",
      "-------\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>当天参与活动商品数量</th>\n",
       "      <th>预售商品数量</th>\n",
       "      <th>参与双十一活动商品总数</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>店名</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>悦诗风吟</th>\n",
       "      <td>2709</td>\n",
       "      <td>60</td>\n",
       "      <td>2769</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>佰草集</th>\n",
       "      <td>1840</td>\n",
       "      <td>182</td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>欧莱雅</th>\n",
       "      <td>1644</td>\n",
       "      <td>115</td>\n",
       "      <td>1759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>雅诗兰黛</th>\n",
       "      <td>1392</td>\n",
       "      <td>239</td>\n",
       "      <td>1631</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>倩碧</th>\n",
       "      <td>1304</td>\n",
       "      <td>299</td>\n",
       "      <td>1603</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>妮维雅</th>\n",
       "      <td>1189</td>\n",
       "      <td>78</td>\n",
       "      <td>1267</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>美加净</th>\n",
       "      <td>1217</td>\n",
       "      <td>6</td>\n",
       "      <td>1223</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>娇兰</th>\n",
       "      <td>805</td>\n",
       "      <td>365</td>\n",
       "      <td>1170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>兰蔻</th>\n",
       "      <td>917</td>\n",
       "      <td>202</td>\n",
       "      <td>1119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>欧珀莱</th>\n",
       "      <td>991</td>\n",
       "      <td>110</td>\n",
       "      <td>1101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>相宜本草</th>\n",
       "      <td>844</td>\n",
       "      <td>79</td>\n",
       "      <td>923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>自然堂</th>\n",
       "      <td>817</td>\n",
       "      <td>57</td>\n",
       "      <td>874</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>兰芝</th>\n",
       "      <td>817</td>\n",
       "      <td>24</td>\n",
       "      <td>841</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>美宝莲</th>\n",
       "      <td>619</td>\n",
       "      <td>114</td>\n",
       "      <td>733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>植村秀</th>\n",
       "      <td>508</td>\n",
       "      <td>183</td>\n",
       "      <td>691</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>玉兰油</th>\n",
       "      <td>588</td>\n",
       "      <td>90</td>\n",
       "      <td>678</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>资生堂</th>\n",
       "      <td>479</td>\n",
       "      <td>157</td>\n",
       "      <td>636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>薇姿</th>\n",
       "      <td>475</td>\n",
       "      <td>132</td>\n",
       "      <td>607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>雅漾</th>\n",
       "      <td>540</td>\n",
       "      <td>47</td>\n",
       "      <td>587</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>雪花秀</th>\n",
       "      <td>434</td>\n",
       "      <td>60</td>\n",
       "      <td>494</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SKII</th>\n",
       "      <td>342</td>\n",
       "      <td>90</td>\n",
       "      <td>432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>蜜丝佛陀</th>\n",
       "      <td>327</td>\n",
       "      <td>92</td>\n",
       "      <td>419</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      当天参与活动商品数量  预售商品数量  参与双十一活动商品总数\n",
       "店名                                   \n",
       "悦诗风吟        2709      60         2769\n",
       "佰草集         1840     182         2022\n",
       "欧莱雅         1644     115         1759\n",
       "雅诗兰黛        1392     239         1631\n",
       "倩碧          1304     299         1603\n",
       "妮维雅         1189      78         1267\n",
       "美加净         1217       6         1223\n",
       "娇兰           805     365         1170\n",
       "兰蔻           917     202         1119\n",
       "欧珀莱          991     110         1101\n",
       "相宜本草         844      79          923\n",
       "自然堂          817      57          874\n",
       "兰芝           817      24          841\n",
       "美宝莲          619     114          733\n",
       "植村秀          508     183          691\n",
       "玉兰油          588      90          678\n",
       "资生堂          479     157          636\n",
       "薇姿           475     132          607\n",
       "雅漾           540      47          587\n",
       "雪花秀          434      60          494\n",
       "SKII         342      90          432\n",
       "蜜丝佛陀         327      92          419"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 真正参与双十一活动的品牌有哪些？其各个品牌参与双十一活动的商品数量分布是怎样的？\n",
    "# 真正参加活动的商品 = 双十一当天在售的商品 + 预售商品 （相加后再去重，去掉预售且当天在售的商品）\n",
    "\n",
    "data_11sale = id_11\n",
    "#print('双十一当天在售的商品的数量为%i个\\n' % len(data_11sale),data_11sale)\n",
    "#print('--------')\n",
    "# 得到“双十一当天在售的商品”id及数量\n",
    "\n",
    "id_11sale_final = np.hstack((data_11sale,id_con3))\n",
    "result2_id = pd.DataFrame({'id':id_11sale_final})\n",
    "print('商品总数为%i个' % m)\n",
    "print('真正参加活动的商品商品总数为%i个，占比为%.2f%%\\n-------' % (len(result2_id),len(result2_id)/m*100))\n",
    "#result2['id'].duplicated() \n",
    "# 得到真正参与双十一活动的商品id\n",
    "\n",
    "x1 =  pd.DataFrame({'id':id_11})\n",
    "x1_df = pd.merge(x1,df,on = 'id', how = 'left')    # 筛选出真正参与活动中 当天在售的商品id对应源数据 \n",
    "brand_11sale = x1_df.groupby('店名')['id'].count()\n",
    "# 得到不同品牌的当天参与活动商品的数量\n",
    "\n",
    "x2 =  pd.DataFrame({'id':id_con3})\n",
    "x2_df = pd.merge(x2,df,on = 'id', how = 'left')    # 筛选出真正参与活动中 当天在售的商品id对应源数据 \n",
    "brand_ys = x2_df.groupby('店名')['id'].count()\n",
    "# 得到不同品牌的预售商品的数量\n",
    "\n",
    "result2_data = pd.DataFrame({'当天参与活动商品数量':brand_11sale,\n",
    "                            '预售商品数量':brand_ys})\n",
    "result2_data['参与双十一活动商品总数'] = result2_data['当天参与活动商品数量'] + result2_data['预售商品数量']\n",
    "result2_data.sort_values(by = '参与双十一活动商品总数',inplace = True,ascending = False)\n",
    "result2_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "    <div class=\"bk-root\">\n",
       "        <div class=\"bk-plotdiv\" id=\"3519d60e-14ed-43c3-8d6e-563e05f80dde\"></div>\n",
       "    </div>\n",
       "<script type=\"text/javascript\">\n",
       "  \n",
       "  (function(root) {\n",
       "    function now() {\n",
       "      return new Date();\n",
       "    }\n",
       "  \n",
       "    var force = false;\n",
       "  \n",
       "    if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
       "      root._bokeh_onload_callbacks = [];\n",
       "      root._bokeh_is_loading = undefined;\n",
       "    }\n",
       "  \n",
       "  \n",
       "    \n",
       "    if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
       "      root._bokeh_timeout = Date.now() + 0;\n",
       "      root._bokeh_failed_load = false;\n",
       "    }\n",
       "  \n",
       "    var NB_LOAD_WARNING = {'data': {'text/html':\n",
       "       \"<div style='background-color: #fdd'>\\n\"+\n",
       "       \"<p>\\n\"+\n",
       "       \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
       "       \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
       "       \"</p>\\n\"+\n",
       "       \"<ul>\\n\"+\n",
       "       \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
       "       \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
       "       \"</ul>\\n\"+\n",
       "       \"<code>\\n\"+\n",
       "       \"from bokeh.resources import INLINE\\n\"+\n",
       "       \"output_notebook(resources=INLINE)\\n\"+\n",
       "       \"</code>\\n\"+\n",
       "       \"</div>\"}};\n",
       "  \n",
       "    function display_loaded() {\n",
       "      if (root.Bokeh !== undefined) {\n",
       "        var el = document.getElementById(\"3519d60e-14ed-43c3-8d6e-563e05f80dde\");\n",
       "        if (el != null) {\n",
       "          el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
       "        }\n",
       "      } else if (Date.now() < root._bokeh_timeout) {\n",
       "        setTimeout(display_loaded, 100)\n",
       "      }\n",
       "    }\n",
       "  \n",
       "  \n",
       "    function run_callbacks() {\n",
       "      try {\n",
       "        root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
       "      }\n",
       "      finally {\n",
       "        delete root._bokeh_onload_callbacks\n",
       "      }\n",
       "      console.info(\"Bokeh: all callbacks have finished\");\n",
       "    }\n",
       "  \n",
       "    function load_libs(js_urls, callback) {\n",
       "      root._bokeh_onload_callbacks.push(callback);\n",
       "      if (root._bokeh_is_loading > 0) {\n",
       "        console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
       "        return null;\n",
       "      }\n",
       "      if (js_urls == null || js_urls.length === 0) {\n",
       "        run_callbacks();\n",
       "        return null;\n",
       "      }\n",
       "      console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
       "      root._bokeh_is_loading = js_urls.length;\n",
       "      for (var i = 0; i < js_urls.length; i++) {\n",
       "        var url = js_urls[i];\n",
       "        var s = document.createElement('script');\n",
       "        s.src = url;\n",
       "        s.async = false;\n",
       "        s.onreadystatechange = s.onload = function() {\n",
       "          root._bokeh_is_loading--;\n",
       "          if (root._bokeh_is_loading === 0) {\n",
       "            console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
       "            run_callbacks()\n",
       "          }\n",
       "        };\n",
       "        s.onerror = function() {\n",
       "          console.warn(\"failed to load library \" + url);\n",
       "        };\n",
       "        console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
       "        document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
       "      }\n",
       "    };var element = document.getElementById(\"3519d60e-14ed-43c3-8d6e-563e05f80dde\");\n",
       "    if (element == null) {\n",
       "      console.log(\"Bokeh: ERROR: autoload.js configured with elementid '3519d60e-14ed-43c3-8d6e-563e05f80dde' but no matching script tag was found. \")\n",
       "      return false;\n",
       "    }\n",
       "  \n",
       "    var js_urls = [];\n",
       "  \n",
       "    var inline_js = [\n",
       "      function(Bokeh) {\n",
       "        (function() {\n",
       "          var fn = function() {\n",
       "            var docs_json = {\"39c10f99-fa8b-49c1-aeee-729edb5985e6\":{\"roots\":{\"references\":[{\"attributes\":{\"fields\":[\"sale_on_11\"]},\"id\":\"21e113e5-2fbd-4982-8325-7595881d3344\",\"type\":\"Stack\"},{\"attributes\":{},\"id\":\"adfa24c7-eeb6-4490-85be-731fa720f5e5\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"cf220d44-3c0a-41bf-809c-188a81b8d364\",\"type\":\"ColumnDataSource\"}},\"id\":\"8cfce7de-91dc-42ce-9666-02bc6d83dee4\",\"type\":\"CDSView\"},{\"attributes\":{\"fields\":[]},\"id\":\"a39dda17-4a58-42d4-9754-9df08eb45f1a\",\"type\":\"Stack\"},{\"attributes\":{},\"id\":\"8b8383cc-4841-4946-9717-06b4efebdf6f\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom\":{\"expr\":{\"id\":\"21e113e5-2fbd-4982-8325-7595881d3344\",\"type\":\"Stack\"}},\"fill_alpha\":{\"value\":0.8},\"fill_color\":{\"value\":\"#e84d60\"},\"line_alpha\":{\"value\":0.8},\"line_color\":{\"value\":\"#e84d60\"},\"top\":{\"expr\":{\"id\":\"ff44c43e-034b-428b-9c7d-3a876f41498f\",\"type\":\"Stack\"}},\"width\":{\"value\":0.9},\"x\":{\"field\":\"brand\"}},\"id\":\"2d458829-64ab-46c4-8c6b-aef14d0d53eb\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"334c87b5-b4ac-4fe7-9af5-1daa18759cb4\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data_source\":{\"id\":\"cf220d44-3c0a-41bf-809c-188a81b8d364\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"107efb23-9780-4ac3-9191-537492b58a86\",\"type\":\"VBar\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"fff3bc19-8beb-418c-8fca-28497e1c2850\",\"type\":\"VBar\"},\"nonselection_glyph\":{\"id\":\"8ac38c96-2fbc-4405-ab6c-5eaa7b5e2919\",\"type\":\"VBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"8cfce7de-91dc-42ce-9666-02bc6d83dee4\",\"type\":\"CDSView\"}},\"id\":\"172ff2ca-5fae-481c-b7eb-aa71b4d56b6b\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fields\":[\"sale_on_11\",\"presell\"]},\"id\":\"ff44c43e-034b-428b-9c7d-3a876f41498f\",\"type\":\"Stack\"},{\"attributes\":{\"callback\":null,\"factors\":[\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u4f70\\u8349\\u96c6\",\"\\u6b27\\u83b1\\u96c5\",\"\\u96c5\\u8bd7\\u5170\\u9edb\",\"\\u5029\\u78a7\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u5a07\\u5170\",\"\\u5170\\u853b\",\"\\u6b27\\u73c0\\u83b1\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u5170\\u829d\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u690d\\u6751\\u79c0\",\"\\u7389\\u5170\\u6cb9\",\"\\u8d44\\u751f\\u5802\",\"\\u8587\\u59ff\",\"\\u96c5\\u6f3e\",\"\\u96ea\\u82b1\\u79c0\",\"SKII\",\"\\u871c\\u4e1d\\u4f5b\\u9640\"]},\"id\":\"a0256d27-d1ac-4303-85f2-3c9af896a3d3\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"c3c5637e-c217-4594-8939-50b0332f4a34\",\"type\":\"CrosshairTool\"},{\"attributes\":{\"fields\":[\"sale_on_11\"]},\"id\":\"06a14dab-d55d-41a4-8dca-f45971d451e4\",\"type\":\"Stack\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"\\u54c1\\u724c\",\"@brand\"],[\"\\u53cc\\u5341\\u4e00\\u5f53\\u5929\\u53c2\\u4e0e\\u6d3b\\u52a8\\u7684\\u5546\\u54c1\\u6570\\u91cf\",\"@sale_on_11\"],[\"\\u9884\\u552e\\u5546\\u54c1\\u6570\\u91cf\",\"@presell\"],[\"\\u53c2\\u4e0e\\u53cc\\u5341\\u4e00\\u6d3b\\u52a8\\u5546\\u54c1\\u603b\\u6570\",\"@sum\"]]},\"id\":\"27eea29f-ecb5-4b89-a77d-5eaaa0e791b4\",\"type\":\"HoverTool\"},{\"attributes\":{\"formatter\":{\"id\":\"a3625f1c-addc-476d-a601-45bfbd5ae276\",\"type\":\"CategoricalTickFormatter\"},\"minor_tick_line_color\":{\"value\":null},\"plot\":{\"id\":\"6cf4f359-ea40-4477-b9d1-b9c324ade18d\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"601da672-3152-41dc-b6a0-383590cb96c7\",\"type\":\"CategoricalTicker\"}},\"id\":\"655c0dce-4cff-4968-aed8-0839dcca6468\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"bottom\":{\"expr\":{\"id\":\"a39dda17-4a58-42d4-9754-9df08eb45f1a\",\"type\":\"Stack\"}},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"expr\":{\"id\":\"06a14dab-d55d-41a4-8dca-f45971d451e4\",\"type\":\"Stack\"}},\"width\":{\"value\":0.9},\"x\":{\"field\":\"brand\"}},\"id\":\"8ac38c96-2fbc-4405-ab6c-5eaa7b5e2919\",\"type\":\"VBar\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"6cf4f359-ea40-4477-b9d1-b9c324ade18d\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"adfa24c7-eeb6-4490-85be-731fa720f5e5\",\"type\":\"BasicTicker\"}},\"id\":\"ab986e1d-a1b6-4247-8040-80bd3d71c1bd\",\"type\":\"Grid\"},{\"attributes\":{\"bottom\":{\"expr\":{\"id\":\"a39dda17-4a58-42d4-9754-9df08eb45f1a\",\"type\":\"Stack\"}},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"black\"},\"line_alpha\":{\"value\":0.2},\"top\":{\"expr\":{\"id\":\"06a14dab-d55d-41a4-8dca-f45971d451e4\",\"type\":\"Stack\"}},\"width\":{\"value\":0.9},\"x\":{\"field\":\"brand\"}},\"id\":\"fff3bc19-8beb-418c-8fca-28497e1c2850\",\"type\":\"VBar\"},{\"attributes\":{\"dimensions\":\"width\"},\"id\":\"f0124bd8-de34-40e8-af2a-abf56846ece2\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"51adb19b-8364-4975-aece-856f7e64e163\",\"type\":\"CategoricalScale\"},{\"attributes\":{\"formatter\":{\"id\":\"334c87b5-b4ac-4fe7-9af5-1daa18759cb4\",\"type\":\"BasicTickFormatter\"},\"minor_tick_line_color\":{\"value\":null},\"plot\":{\"id\":\"6cf4f359-ea40-4477-b9d1-b9c324ade18d\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"adfa24c7-eeb6-4490-85be-731fa720f5e5\",\"type\":\"BasicTicker\"}},\"id\":\"05c84b0d-96e0-4dc7-a0ac-7ed1475703aa\",\"type\":\"LinearAxis\"},{\"attributes\":{\"label\":{\"value\":\"presell\"},\"renderers\":[{\"id\":\"fc4a9d3c-b8eb-492a-99f1-5140b805c435\",\"type\":\"GlyphRenderer\"}]},\"id\":\"b7ae0e42-24e2-43e3-8186-903d03fd9b5d\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"sale_on_11\",\"brand\",\"sum\",\"presell\"],\"data\":{\"brand\":[\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u4f70\\u8349\\u96c6\",\"\\u6b27\\u83b1\\u96c5\",\"\\u96c5\\u8bd7\\u5170\\u9edb\",\"\\u5029\\u78a7\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u5a07\\u5170\",\"\\u5170\\u853b\",\"\\u6b27\\u73c0\\u83b1\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u5170\\u829d\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u690d\\u6751\\u79c0\",\"\\u7389\\u5170\\u6cb9\",\"\\u8d44\\u751f\\u5802\",\"\\u8587\\u59ff\",\"\\u96c5\\u6f3e\",\"\\u96ea\\u82b1\\u79c0\",\"SKII\",\"\\u871c\\u4e1d\\u4f5b\\u9640\"],\"presell\":[60,182,115,239,299,78,6,365,202,110,79,57,24,114,183,90,157,132,47,60,90,92],\"sale_on_11\":[2709,1840,1644,1392,1304,1189,1217,805,917,991,844,817,817,619,508,588,479,475,540,434,342,327],\"sum\":[2769,2022,1759,1631,1603,1267,1223,1170,1119,1101,923,874,841,733,691,678,636,607,587,494,432,419]}},\"id\":\"cf220d44-3c0a-41bf-809c-188a81b8d364\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"cf220d44-3c0a-41bf-809c-188a81b8d364\",\"type\":\"ColumnDataSource\"}},\"id\":\"7cdec14a-defb-4ca0-9fef-6226e38b4d60\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"63e7534f-9d9a-49b9-8b69-aafd699b5cd0\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom\":{\"expr\":{\"id\":\"21e113e5-2fbd-4982-8325-7595881d3344\",\"type\":\"Stack\"}},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"black\"},\"line_alpha\":{\"value\":0.2},\"top\":{\"expr\":{\"id\":\"ff44c43e-034b-428b-9c7d-3a876f41498f\",\"type\":\"Stack\"}},\"width\":{\"value\":0.9},\"x\":{\"field\":\"brand\"}},\"id\":\"672112d8-93c2-4d52-a12b-5f28d51b1e52\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"601da672-3152-41dc-b6a0-383590cb96c7\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"6cf4f359-ea40-4477-b9d1-b9c324ade18d\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"601da672-3152-41dc-b6a0-383590cb96c7\",\"type\":\"CategoricalTicker\"}},\"id\":\"dc8710d6-a90c-432b-8a83-98601285428a\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"655c0dce-4cff-4968-aed8-0839dcca6468\",\"type\":\"CategoricalAxis\"}],\"left\":[{\"id\":\"05c84b0d-96e0-4dc7-a0ac-7ed1475703aa\",\"type\":\"LinearAxis\"}],\"outline_line_color\":{\"value\":null},\"plot_height\":350,\"plot_width\":900,\"renderers\":[{\"id\":\"655c0dce-4cff-4968-aed8-0839dcca6468\",\"type\":\"CategoricalAxis\"},{\"id\":\"dc8710d6-a90c-432b-8a83-98601285428a\",\"type\":\"Grid\"},{\"id\":\"05c84b0d-96e0-4dc7-a0ac-7ed1475703aa\",\"type\":\"LinearAxis\"},{\"id\":\"ab986e1d-a1b6-4247-8040-80bd3d71c1bd\",\"type\":\"Grid\"},{\"id\":\"d15f43fe-c1ab-4f1d-a9ba-cb3d4e1ce61c\",\"type\":\"Legend\"},{\"id\":\"172ff2ca-5fae-481c-b7eb-aa71b4d56b6b\",\"type\":\"GlyphRenderer\"},{\"id\":\"fc4a9d3c-b8eb-492a-99f1-5140b805c435\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"405f7136-1772-4019-ba75-2ab362f1f044\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"fd5fba82-d192-4d73-8e9a-f1984cee9393\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"a0256d27-d1ac-4303-85f2-3c9af896a3d3\",\"type\":\"FactorRange\"},\"x_scale\":{\"id\":\"51adb19b-8364-4975-aece-856f7e64e163\",\"type\":\"CategoricalScale\"},\"y_range\":{\"id\":\"0c35f4fa-ce78-44b3-a3cf-28b4f77e6135\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"88fe4e62-2752-444e-9725-89e8a7a317ea\",\"type\":\"LinearScale\"}},\"id\":\"6cf4f359-ea40-4477-b9d1-b9c324ade18d\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"88fe4e62-2752-444e-9725-89e8a7a317ea\",\"type\":\"LinearScale\"},{\"attributes\":{\"click_policy\":\"mute\",\"items\":[{\"id\":\"26763698-f4ef-44b0-b780-0ad1466da4fc\",\"type\":\"LegendItem\"},{\"id\":\"b7ae0e42-24e2-43e3-8186-903d03fd9b5d\",\"type\":\"LegendItem\"}],\"orientation\":\"horizontal\",\"plot\":{\"id\":\"6cf4f359-ea40-4477-b9d1-b9c324ade18d\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"d15f43fe-c1ab-4f1d-a9ba-cb3d4e1ce61c\",\"type\":\"Legend\"},{\"attributes\":{\"data_source\":{\"id\":\"cf220d44-3c0a-41bf-809c-188a81b8d364\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2d458829-64ab-46c4-8c6b-aef14d0d53eb\",\"type\":\"VBar\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"672112d8-93c2-4d52-a12b-5f28d51b1e52\",\"type\":\"VBar\"},\"nonselection_glyph\":{\"id\":\"8950697d-8c24-4db1-b798-15fa1ea5d66a\",\"type\":\"VBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"7cdec14a-defb-4ca0-9fef-6226e38b4d60\",\"type\":\"CDSView\"}},\"id\":\"fc4a9d3c-b8eb-492a-99f1-5140b805c435\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"0c35f4fa-ce78-44b3-a3cf-28b4f77e6135\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom\":{\"expr\":{\"id\":\"a39dda17-4a58-42d4-9754-9df08eb45f1a\",\"type\":\"Stack\"}},\"fill_alpha\":{\"value\":0.8},\"fill_color\":{\"value\":\"#718dbf\"},\"line_alpha\":{\"value\":0.8},\"line_color\":{\"value\":\"#718dbf\"},\"top\":{\"expr\":{\"id\":\"06a14dab-d55d-41a4-8dca-f45971d451e4\",\"type\":\"Stack\"}},\"width\":{\"value\":0.9},\"x\":{\"field\":\"brand\"}},\"id\":\"107efb23-9780-4ac3-9191-537492b58a86\",\"type\":\"VBar\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"27eea29f-ecb5-4b89-a77d-5eaaa0e791b4\",\"type\":\"HoverTool\"},{\"id\":\"8b8383cc-4841-4946-9717-06b4efebdf6f\",\"type\":\"ResetTool\"},{\"id\":\"f0124bd8-de34-40e8-af2a-abf56846ece2\",\"type\":\"WheelZoomTool\"},{\"id\":\"63e7534f-9d9a-49b9-8b69-aafd699b5cd0\",\"type\":\"PanTool\"},{\"id\":\"c3c5637e-c217-4594-8939-50b0332f4a34\",\"type\":\"CrosshairTool\"}]},\"id\":\"fd5fba82-d192-4d73-8e9a-f1984cee9393\",\"type\":\"Toolbar\"},{\"attributes\":{\"label\":{\"value\":\"sale_on_11\"},\"renderers\":[{\"id\":\"172ff2ca-5fae-481c-b7eb-aa71b4d56b6b\",\"type\":\"GlyphRenderer\"}]},\"id\":\"26763698-f4ef-44b0-b780-0ad1466da4fc\",\"type\":\"LegendItem\"},{\"attributes\":{\"bottom\":{\"expr\":{\"id\":\"21e113e5-2fbd-4982-8325-7595881d3344\",\"type\":\"Stack\"}},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"expr\":{\"id\":\"ff44c43e-034b-428b-9c7d-3a876f41498f\",\"type\":\"Stack\"}},\"width\":{\"value\":0.9},\"x\":{\"field\":\"brand\"}},\"id\":\"8950697d-8c24-4db1-b798-15fa1ea5d66a\",\"type\":\"VBar\"},{\"attributes\":{\"plot\":null,\"text\":\"\\u5404\\u4e2a\\u54c1\\u724c\\u53c2\\u4e0e\\u53cc\\u5341\\u4e00\\u6d3b\\u52a8\\u7684\\u5546\\u54c1\\u6570\\u91cf\\u5206\\u5e03\"},\"id\":\"405f7136-1772-4019-ba75-2ab362f1f044\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"a3625f1c-addc-476d-a601-45bfbd5ae276\",\"type\":\"CategoricalTickFormatter\"}],\"root_ids\":[\"6cf4f359-ea40-4477-b9d1-b9c324ade18d\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.7\"}};\n",
       "            var render_items = [{\"docid\":\"39c10f99-fa8b-49c1-aeee-729edb5985e6\",\"elementid\":\"3519d60e-14ed-43c3-8d6e-563e05f80dde\",\"modelid\":\"6cf4f359-ea40-4477-b9d1-b9c324ade18d\"}];\n",
       "            \n",
       "            Bokeh.embed.embed_items(docs_json, render_items);\n",
       "          };\n",
       "          if (document.readyState != \"loading\") fn();\n",
       "          else document.addEventListener(\"DOMContentLoaded\", fn);\n",
       "        })();\n",
       "      },\n",
       "      function(Bokeh) {\n",
       "      }\n",
       "    ];\n",
       "  \n",
       "    function run_inline_js() {\n",
       "      \n",
       "      if ((root.Bokeh !== undefined) || (force === true)) {\n",
       "        for (var i = 0; i < inline_js.length; i++) {\n",
       "          inline_js[i].call(root, root.Bokeh);\n",
       "        }if (force === true) {\n",
       "          display_loaded();\n",
       "        }} else if (Date.now() < root._bokeh_timeout) {\n",
       "        setTimeout(run_inline_js, 100);\n",
       "      } else if (!root._bokeh_failed_load) {\n",
       "        console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
       "        root._bokeh_failed_load = true;\n",
       "      } else if (force !== true) {\n",
       "        var cell = $(document.getElementById(\"3519d60e-14ed-43c3-8d6e-563e05f80dde\")).parents('.cell').data().cell;\n",
       "        cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
       "      }\n",
       "  \n",
       "    }\n",
       "  \n",
       "    if (root._bokeh_is_loading === 0) {\n",
       "      console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
       "      run_inline_js();\n",
       "    } else {\n",
       "      load_libs(js_urls, function() {\n",
       "        console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
       "        run_inline_js();\n",
       "      });\n",
       "    }\n",
       "  }(window));\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 制作堆叠图查看各个品牌参与双十一活动的商品数量分布\n",
    "\n",
    "from bokeh.models import HoverTool\n",
    "from bokeh.core.properties import value\n",
    "# 导入相关模块\n",
    "\n",
    "lst_brand = result2_data.index.tolist()\n",
    "lst_type = result2_data.columns.tolist()[:2]\n",
    "colors = [\"#718dbf\" ,\"#e84d60\"]\n",
    "# 设置好参数\n",
    "\n",
    "result2_data.index.name = 'brand'\n",
    "result2_data.columns = ['sale_on_11','presell','sum']\n",
    "# 修改数据index和columns名字为英文\n",
    "\n",
    "source = ColumnDataSource(data=result2_data)\n",
    "# 创建数据\n",
    "\n",
    "hover = HoverTool(tooltips=[(\"品牌\", \"@brand\"),\n",
    "                            (\"双十一当天参与活动的商品数量\", \"@sale_on_11\"),\n",
    "                            (\"预售商品数量\", \"@presell\"),\n",
    "                            (\"参与双十一活动商品总数\", \"@sum\")\n",
    "                           ])  # 设置标签显示内容\n",
    "\n",
    "p = figure(x_range=lst_brand, plot_width=900, plot_height=350, title=\"各个品牌参与双十一活动的商品数量分布\",\n",
    "          tools=[hover,'reset,xwheel_zoom,pan,crosshair'])\n",
    "# 构建绘图空间\n",
    "\n",
    "p.vbar_stack(lst_type,          # 设置堆叠值，这里source中包含了不同年份的值，years变量用于识别不同堆叠层\n",
    "             x='brand',     # 设置x坐标\n",
    "             source=source,\n",
    "             width=0.9, color=colors, alpha = 0.8,legend=[value(x) for x in lst_type],\n",
    "             muted_color='black', muted_alpha=0.2\n",
    "             )\n",
    "# 绘制堆叠图\n",
    "\n",
    "p.xgrid.grid_line_color = None\n",
    "p.axis.minor_tick_line_color = None\n",
    "p.outline_line_color = None\n",
    "p.legend.location = \"top_right\"\n",
    "p.legend.orientation = \"horizontal\"\n",
    "p.legend.click_policy=\"mute\"\n",
    "# 设置其他参数\n",
    "\n",
    "show(p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "2、哪些商品真的在打折呢？\n",
    "要求：\n",
    "① 针对每个商品，评估其打折的情况\n",
    "② 针对在打折的商品，其折扣率是多少\n",
    "   * 用bokeh绘制折线图：x轴为折扣率，y轴为商品数量\n",
    "③ 按照品牌分析，不同品牌的打折力度\n",
    "   * 用bokeh绘制浮动散点图，y坐标为品牌类型，x坐标为折扣力度\n",
    "提示：\n",
    "① 打折情况评估方法：\n",
    "   真打折：商品的价格在10天内有波动、双11价格为10天内最低价、不存在涨价现象\n",
    "   不打折：商品价格无变化\n",
    "② 针对每个商品做price字段的value值统计，查看价格是否有波动，可以先用pd.cut将date分为不同周期：'双十一前','双十一当天','双十一后'，得到period字段\n",
    "   data[['id','price','date']].groupby(['id','price']).min()\n",
    "   针对统计出来的结果，如果按照id和price分组仍只有一个唯一值，则说明价格未变，没打折；否则为打折\n",
    "③ 折扣率 = 双十一当天价格 / 双十一之前价格\n",
    "④ 作图过程中，清除掉折扣率大于95%的数据\n",
    "\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "真打折的商品数量约占比24.73%，不打折的商品数量约占比75.27%\n"
     ]
    }
   ],
   "source": [
    "# 针对每个商品，评估其打折的情况\n",
    "#   真打折：商品的价格在10天内有波动、双11价格为10天内最低价、不存在涨价现象\n",
    "#   不打折：商品价格无变化\n",
    "\n",
    "data2 = df[['id','title','店名','date','price']]\n",
    "data2['period'] = pd.cut(data2['date'],[4,10,11,14],labels = ['双十一前','双十一当天','双十一后'])\n",
    "#print(data2.head())\n",
    "# 筛选数据\n",
    "\n",
    "price = data2[['id','price','period']].groupby(['id','price']).min()\n",
    "price.reset_index(inplace = True)\n",
    "# 针对每个商品做price字段的value值统计，查看价格是否有波动\n",
    "\n",
    "id_count = price['id'].value_counts()\n",
    "id_type1 = id_count[id_count == 1].index\n",
    "id_type2 = id_count[id_count != 1].index\n",
    "# 筛选出“不打折”和“真打折”的商品id\n",
    "\n",
    "n1 = len(id_type1)\n",
    "n2 = len(id_type2)\n",
    "print('真打折的商品数量约占比%.2f%%，不打折的商品数量约占比%.2f%%' % (n2/len(id_count)*100, n1/len(id_count)*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>period</th>\n",
       "      <th>price</th>\n",
       "      <th>店名</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A10027317366</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>258.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>A10027317366</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>159.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>A10027317366</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>188.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A10588608182</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>249.00</td>\n",
       "      <td>欧莱雅</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A10588608182</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>189.00</td>\n",
       "      <td>欧莱雅</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>A10588608182</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>189.00</td>\n",
       "      <td>欧莱雅</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>A10847151685</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>240.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>A10847151685</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>125.99</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>A10847151685</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>180.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>A12229499633</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>49.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>A12229499633</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>A12229499633</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>A12229615671</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>79.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>A12229615671</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>39.50</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>A12229615671</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>A12229695732</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>69.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>A12229695732</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>A12229695732</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>69.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>A12454406919</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>99.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>A12454406919</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>A12454406919</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>99.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>A12454514788</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>89.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>A12454514788</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>79.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>A12454514788</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>81.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>A12455538031</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>79.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>A12455538031</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>69.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>A12455538031</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>79.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>A12456273464</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>69.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>A12456273464</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>62.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>A12456273464</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>63.00</td>\n",
       "      <td>美宝莲</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10476</th>\n",
       "      <td>A9552556003</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10477</th>\n",
       "      <td>A9552556003</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>90.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10478</th>\n",
       "      <td>A9552556003</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>120.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10479</th>\n",
       "      <td>A9552956907</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10480</th>\n",
       "      <td>A9552956907</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>90.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10481</th>\n",
       "      <td>A9552956907</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>120.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10482</th>\n",
       "      <td>A9554899141</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10483</th>\n",
       "      <td>A9554899141</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>81.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10484</th>\n",
       "      <td>A9554899141</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>120.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10485</th>\n",
       "      <td>A9555026921</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>60.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10486</th>\n",
       "      <td>A9555026921</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>45.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10487</th>\n",
       "      <td>A9555026921</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10488</th>\n",
       "      <td>A9555416417</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>160.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10489</th>\n",
       "      <td>A9555416417</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>120.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10490</th>\n",
       "      <td>A9555416417</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>160.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10491</th>\n",
       "      <td>A9555524581</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>320.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10492</th>\n",
       "      <td>A9555524581</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>224.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10493</th>\n",
       "      <td>A9555524581</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>320.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10494</th>\n",
       "      <td>A9609851200</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>89.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10495</th>\n",
       "      <td>A9609851200</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>44.50</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10496</th>\n",
       "      <td>A9609851200</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10497</th>\n",
       "      <td>A9703525117</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>280.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10498</th>\n",
       "      <td>A9703525117</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>196.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10499</th>\n",
       "      <td>A9703525117</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>280.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10500</th>\n",
       "      <td>A9709829810</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>99.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10501</th>\n",
       "      <td>A9709829810</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>49.50</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10502</th>\n",
       "      <td>A9709829810</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>69.00</td>\n",
       "      <td>相宜本草</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10503</th>\n",
       "      <td>A9768255247</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>308.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10504</th>\n",
       "      <td>A9768255247</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>159.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10505</th>\n",
       "      <td>A9768255247</td>\n",
       "      <td>双十一后</td>\n",
       "      <td>230.00</td>\n",
       "      <td>佰草集</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>10506 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                 id period   price    店名\n",
       "0      A10027317366   双十一前  258.00  相宜本草\n",
       "1      A10027317366  双十一当天  159.00  相宜本草\n",
       "2      A10027317366   双十一后  188.00  相宜本草\n",
       "3      A10588608182   双十一前  249.00   欧莱雅\n",
       "4      A10588608182  双十一当天  189.00   欧莱雅\n",
       "5      A10588608182   双十一后  189.00   欧莱雅\n",
       "6      A10847151685   双十一前  240.00   佰草集\n",
       "7      A10847151685  双十一当天  125.99   佰草集\n",
       "8      A10847151685   双十一后  180.00   佰草集\n",
       "9      A12229499633   双十一前   49.00  相宜本草\n",
       "10     A12229499633  双十一当天     NaN   NaN\n",
       "11     A12229499633   双十一后     NaN   NaN\n",
       "12     A12229615671   双十一前   79.00  相宜本草\n",
       "13     A12229615671  双十一当天   39.50  相宜本草\n",
       "14     A12229615671   双十一后     NaN   NaN\n",
       "15     A12229695732   双十一前   69.00  相宜本草\n",
       "16     A12229695732  双十一当天     NaN   NaN\n",
       "17     A12229695732   双十一后   69.00  相宜本草\n",
       "18     A12454406919   双十一前   99.00   美宝莲\n",
       "19     A12454406919  双十一当天     NaN   NaN\n",
       "20     A12454406919   双十一后   99.00   美宝莲\n",
       "21     A12454514788   双十一前   89.00   美宝莲\n",
       "22     A12454514788  双十一当天   79.00   美宝莲\n",
       "23     A12454514788   双十一后   81.00   美宝莲\n",
       "24     A12455538031   双十一前   79.00   美宝莲\n",
       "25     A12455538031  双十一当天   69.00   美宝莲\n",
       "26     A12455538031   双十一后   79.00   美宝莲\n",
       "27     A12456273464   双十一前   69.00   美宝莲\n",
       "28     A12456273464  双十一当天   62.00   美宝莲\n",
       "29     A12456273464   双十一后   63.00   美宝莲\n",
       "...             ...    ...     ...   ...\n",
       "10476   A9552556003   双十一前  120.00   佰草集\n",
       "10477   A9552556003  双十一当天   90.00   佰草集\n",
       "10478   A9552556003   双十一后  120.00   佰草集\n",
       "10479   A9552956907   双十一前  120.00   佰草集\n",
       "10480   A9552956907  双十一当天   90.00   佰草集\n",
       "10481   A9552956907   双十一后  120.00   佰草集\n",
       "10482   A9554899141   双十一前  120.00   佰草集\n",
       "10483   A9554899141  双十一当天   81.00   佰草集\n",
       "10484   A9554899141   双十一后  120.00   佰草集\n",
       "10485   A9555026921   双十一前   60.00   佰草集\n",
       "10486   A9555026921  双十一当天   45.00   佰草集\n",
       "10487   A9555026921   双十一后     NaN   NaN\n",
       "10488   A9555416417   双十一前  160.00   佰草集\n",
       "10489   A9555416417  双十一当天  120.00   佰草集\n",
       "10490   A9555416417   双十一后  160.00   佰草集\n",
       "10491   A9555524581   双十一前  320.00   佰草集\n",
       "10492   A9555524581  双十一当天  224.00   佰草集\n",
       "10493   A9555524581   双十一后  320.00   佰草集\n",
       "10494   A9609851200   双十一前   89.00  相宜本草\n",
       "10495   A9609851200  双十一当天   44.50  相宜本草\n",
       "10496   A9609851200   双十一后     NaN   NaN\n",
       "10497   A9703525117   双十一前  280.00   佰草集\n",
       "10498   A9703525117  双十一当天  196.00   佰草集\n",
       "10499   A9703525117   双十一后  280.00   佰草集\n",
       "10500   A9709829810   双十一前   99.00  相宜本草\n",
       "10501   A9709829810  双十一当天   49.50  相宜本草\n",
       "10502   A9709829810   双十一后   69.00  相宜本草\n",
       "10503   A9768255247   双十一前  308.00   佰草集\n",
       "10504   A9768255247  双十一当天  159.00   佰草集\n",
       "10505   A9768255247   双十一后  230.00   佰草集\n",
       "\n",
       "[10506 rows x 4 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 针对在打折的商品，其折扣率是多少\n",
    "\n",
    "result3_data1 = data2[['id','price','period','店名']].groupby(['id','period']).min()\n",
    "result3_data1.reset_index(inplace = True)\n",
    "# 筛选数据\n",
    "\n",
    "result3_before11 = result3_data1[result3_data1['period'] == '双十一前']\n",
    "result3_at11 = result3_data1[result3_data1['period'] == '双十一当天']\n",
    "result3_data2 = pd.merge(result3_at11,result3_before11,on = 'id')\n",
    "# 筛选出商品双十一当天及双十一之前的价格\n",
    "\n",
    "result3_data2['zkl'] = result3_data2['price_x'] / result3_data2['price_y']\n",
    "# 计算折扣率\n",
    "\n",
    "\n",
    "result3_data1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "    <div class=\"bk-root\">\n",
       "        <div class=\"bk-plotdiv\" id=\"4cf53d35-22a2-46dd-b6a7-0a1b416aa844\"></div>\n",
       "    </div>\n",
       "<script type=\"text/javascript\">\n",
       "  \n",
       "  (function(root) {\n",
       "    function now() {\n",
       "      return new Date();\n",
       "    }\n",
       "  \n",
       "    var force = false;\n",
       "  \n",
       "    if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
       "      root._bokeh_onload_callbacks = [];\n",
       "      root._bokeh_is_loading = undefined;\n",
       "    }\n",
       "  \n",
       "  \n",
       "    \n",
       "    if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
       "      root._bokeh_timeout = Date.now() + 0;\n",
       "      root._bokeh_failed_load = false;\n",
       "    }\n",
       "  \n",
       "    var NB_LOAD_WARNING = {'data': {'text/html':\n",
       "       \"<div style='background-color: #fdd'>\\n\"+\n",
       "       \"<p>\\n\"+\n",
       "       \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
       "       \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
       "       \"</p>\\n\"+\n",
       "       \"<ul>\\n\"+\n",
       "       \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
       "       \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
       "       \"</ul>\\n\"+\n",
       "       \"<code>\\n\"+\n",
       "       \"from bokeh.resources import INLINE\\n\"+\n",
       "       \"output_notebook(resources=INLINE)\\n\"+\n",
       "       \"</code>\\n\"+\n",
       "       \"</div>\"}};\n",
       "  \n",
       "    function display_loaded() {\n",
       "      if (root.Bokeh !== undefined) {\n",
       "        var el = document.getElementById(\"4cf53d35-22a2-46dd-b6a7-0a1b416aa844\");\n",
       "        if (el != null) {\n",
       "          el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
       "        }\n",
       "      } else if (Date.now() < root._bokeh_timeout) {\n",
       "        setTimeout(display_loaded, 100)\n",
       "      }\n",
       "    }\n",
       "  \n",
       "  \n",
       "    function run_callbacks() {\n",
       "      try {\n",
       "        root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
       "      }\n",
       "      finally {\n",
       "        delete root._bokeh_onload_callbacks\n",
       "      }\n",
       "      console.info(\"Bokeh: all callbacks have finished\");\n",
       "    }\n",
       "  \n",
       "    function load_libs(js_urls, callback) {\n",
       "      root._bokeh_onload_callbacks.push(callback);\n",
       "      if (root._bokeh_is_loading > 0) {\n",
       "        console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
       "        return null;\n",
       "      }\n",
       "      if (js_urls == null || js_urls.length === 0) {\n",
       "        run_callbacks();\n",
       "        return null;\n",
       "      }\n",
       "      console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
       "      root._bokeh_is_loading = js_urls.length;\n",
       "      for (var i = 0; i < js_urls.length; i++) {\n",
       "        var url = js_urls[i];\n",
       "        var s = document.createElement('script');\n",
       "        s.src = url;\n",
       "        s.async = false;\n",
       "        s.onreadystatechange = s.onload = function() {\n",
       "          root._bokeh_is_loading--;\n",
       "          if (root._bokeh_is_loading === 0) {\n",
       "            console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
       "            run_callbacks()\n",
       "          }\n",
       "        };\n",
       "        s.onerror = function() {\n",
       "          console.warn(\"failed to load library \" + url);\n",
       "        };\n",
       "        console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
       "        document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
       "      }\n",
       "    };var element = document.getElementById(\"4cf53d35-22a2-46dd-b6a7-0a1b416aa844\");\n",
       "    if (element == null) {\n",
       "      console.log(\"Bokeh: ERROR: autoload.js configured with elementid '4cf53d35-22a2-46dd-b6a7-0a1b416aa844' but no matching script tag was found. \")\n",
       "      return false;\n",
       "    }\n",
       "  \n",
       "    var js_urls = [];\n",
       "  \n",
       "    var inline_js = [\n",
       "      function(Bokeh) {\n",
       "        (function() {\n",
       "          var fn = function() {\n",
       "            var docs_json = {\"f804b279-4b6c-437b-804b-610128751fa0\":{\"roots\":{\"references\":[{\"attributes\":{\"callback\":null,\"tooltips\":[[\"\\u6298\\u6263\\u7387\",\"@zkl\"]]},\"id\":\"6e4e483c-237d-4081-8ac5-75a308d90b04\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2fdb7b3b-a724-4e2a-83c8-5c2ec92c60a2\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"zkl_pre\",\"id\",\"zkl_range\",\"zkl\"],\"data\":{\"id\":[0,1,4,5,2,0,4,8,12,164,9,38,23,64,63,55,72,239,23],\"zkl\":[0,1,4,5,2,0,4,8,12,164,9,38,23,64,63,55,72,239,23],\"zkl_pre\":{\"__ndarray__\":\"AAAAAAAAAABMLNy+Q9hUP0ws3L5D2HQ/XjeTrlQOej9MLNy+Q9hkPwAAAAAAAAAATCzcvkPYdD9MLNy+Q9iEP3FCSp5lRI8/wRiKzBa1yj/Vsbc2THOHP5p0pXLQwKg/rX9cYuH2nT9MLNy+Q9i0P5q74K/ihLQ/ETYFONrpsT/Vsbc2THO3P1uNLz/nddM/rX9cYuH2nT8=\",\"dtype\":\"float64\",\"shape\":[19]},\"zkl_range\":[\"(0, 0.05]\",\"(0.05, 0.1]\",\"(0.1, 0.15]\",\"(0.15, 0.2]\",\"(0.2, 0.25]\",\"(0.25, 0.3]\",\"(0.3, 0.35]\",\"(0.35, 0.4]\",\"(0.4, 0.45]\",\"(0.45, 0.5]\",\"(0.5, 0.55]\",\"(0.55, 0.6]\",\"(0.6, 0.65]\",\"(0.65, 0.7]\",\"(0.7, 0.75]\",\"(0.75, 0.8]\",\"(0.8, 0.85]\",\"(0.85, 0.9]\",\"(0.9, 0.95]\"]}},\"id\":\"7307988a-af87-4977-86e0-cdac1bce7063\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"59773d92-9dee-4628-ba59-cac8e271cdb3\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"7307988a-af87-4977-86e0-cdac1bce7063\",\"type\":\"ColumnDataSource\"}},\"id\":\"906d1c5e-4a0c-47d4-8a7b-6cf48bbf37f4\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.8},\"fill_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.8},\"line_color\":{\"value\":\"red\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"zkl_range\"},\"y\":{\"field\":\"zkl_pre\"}},\"id\":\"89027cd3-3edd-4628-b98d-b636fad0ab1c\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"7307988a-af87-4977-86e0-cdac1bce7063\",\"type\":\"ColumnDataSource\"}},\"id\":\"769c99ba-517d-4bd1-9f8d-6a4a71f3323c\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"factors\":[\"(0, 0.05]\",\"(0.05, 0.1]\",\"(0.1, 0.15]\",\"(0.15, 0.2]\",\"(0.2, 0.25]\",\"(0.25, 0.3]\",\"(0.3, 0.35]\",\"(0.35, 0.4]\",\"(0.4, 0.45]\",\"(0.45, 0.5]\",\"(0.5, 0.55]\",\"(0.55, 0.6]\",\"(0.6, 0.65]\",\"(0.65, 0.7]\",\"(0.7, 0.75]\",\"(0.75, 0.8]\",\"(0.8, 0.85]\",\"(0.85, 0.9]\",\"(0.9, 0.95]\"]},\"id\":\"fbc7cd59-e0f3-473c-968b-4f4c42ba7a9c\",\"type\":\"FactorRange\"},{\"attributes\":{\"callback\":null},\"id\":\"df4eb3fb-bdfb-4138-893b-f35be254091f\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"7307988a-af87-4977-86e0-cdac1bce7063\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"89027cd3-3edd-4628-b98d-b636fad0ab1c\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"b3a1c1df-5e50-4061-ae76-fc4c320c4ede\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"906d1c5e-4a0c-47d4-8a7b-6cf48bbf37f4\",\"type\":\"CDSView\"}},\"id\":\"d02cd67e-b5db-43d4-8ba3-0848a2d620f6\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"4d9eeaf8-57ac-4753-9a34-b832d5697f29\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"2fdb7b3b-a724-4e2a-83c8-5c2ec92c60a2\",\"type\":\"BasicTicker\"}},\"id\":\"2ced3607-8a89-4e63-ad0c-bac067500f4b\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"d278dfe6-2bc5-4d92-b9f1-7cb9e8d51e4b\",\"type\":\"LinearScale\"},{\"attributes\":{\"dimensions\":\"width\"},\"id\":\"8f332538-4856-49fa-9a01-bb04609a60fb\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"formatter\":{\"id\":\"59773d92-9dee-4628-ba59-cac8e271cdb3\",\"type\":\"BasicTickFormatter\"},\"minor_tick_line_color\":{\"value\":null},\"plot\":{\"id\":\"4d9eeaf8-57ac-4753-9a34-b832d5697f29\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"2fdb7b3b-a724-4e2a-83c8-5c2ec92c60a2\",\"type\":\"BasicTicker\"}},\"id\":\"9d511fbc-45cb-49b6-89ad-9b32108949f8\",\"type\":\"LinearAxis\"},{\"attributes\":{\"below\":[{\"id\":\"f059d87b-ff1c-4ab1-9fe7-5cb113a7f653\",\"type\":\"CategoricalAxis\"}],\"left\":[{\"id\":\"9d511fbc-45cb-49b6-89ad-9b32108949f8\",\"type\":\"LinearAxis\"}],\"outline_line_color\":{\"value\":null},\"plot_height\":350,\"plot_width\":900,\"renderers\":[{\"id\":\"f059d87b-ff1c-4ab1-9fe7-5cb113a7f653\",\"type\":\"CategoricalAxis\"},{\"id\":\"380c0aa0-c337-435a-a5d4-1a477099c0d8\",\"type\":\"Grid\"},{\"id\":\"9d511fbc-45cb-49b6-89ad-9b32108949f8\",\"type\":\"LinearAxis\"},{\"id\":\"2ced3607-8a89-4e63-ad0c-bac067500f4b\",\"type\":\"Grid\"},{\"id\":\"c6a995e0-8c66-454d-add8-6a0cedf2ea1b\",\"type\":\"GlyphRenderer\"},{\"id\":\"d02cd67e-b5db-43d4-8ba3-0848a2d620f6\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"ce341441-e5f8-4802-bc40-0fbbeddf1742\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"f5fcbd50-d0ad-443c-b94e-f54848adf10f\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"fbc7cd59-e0f3-473c-968b-4f4c42ba7a9c\",\"type\":\"FactorRange\"},\"x_scale\":{\"id\":\"ce7ae233-fd75-419a-9011-428b78a044cd\",\"type\":\"CategoricalScale\"},\"y_range\":{\"id\":\"df4eb3fb-bdfb-4138-893b-f35be254091f\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"d278dfe6-2bc5-4d92-b9f1-7cb9e8d51e4b\",\"type\":\"LinearScale\"}},\"id\":\"4d9eeaf8-57ac-4753-9a34-b832d5697f29\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"03c3cc2d-819c-492b-8d26-3dba0bec0f8b\",\"type\":\"ResetTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"6e4e483c-237d-4081-8ac5-75a308d90b04\",\"type\":\"HoverTool\"},{\"id\":\"03c3cc2d-819c-492b-8d26-3dba0bec0f8b\",\"type\":\"ResetTool\"},{\"id\":\"8f332538-4856-49fa-9a01-bb04609a60fb\",\"type\":\"WheelZoomTool\"},{\"id\":\"f47a9ee0-9dc7-42ae-a422-23c063e8011c\",\"type\":\"PanTool\"},{\"id\":\"2f5bbe1f-db69-4068-9d47-c5f17a671b05\",\"type\":\"CrosshairTool\"}]},\"id\":\"f5fcbd50-d0ad-443c-b94e-f54848adf10f\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2f5bbe1f-db69-4068-9d47-c5f17a671b05\",\"type\":\"CrosshairTool\"},{\"attributes\":{},\"id\":\"80966af3-f91f-4f2e-921e-06fec57c8acc\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"line_alpha\":{\"value\":0.8},\"line_dash\":[10,4],\"line_width\":{\"value\":2},\"x\":{\"field\":\"zkl_range\"},\"y\":{\"field\":\"zkl_pre\"}},\"id\":\"84749e00-94d9-4554-a8e7-e826daa80054\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"f47a9ee0-9dc7-42ae-a422-23c063e8011c\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"zkl_range\"},\"y\":{\"field\":\"zkl_pre\"}},\"id\":\"b3a1c1df-5e50-4061-ae76-fc4c320c4ede\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"7307988a-af87-4977-86e0-cdac1bce7063\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"84749e00-94d9-4554-a8e7-e826daa80054\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"7b1a355b-c814-4e33-93d8-39466524a876\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"769c99ba-517d-4bd1-9f8d-6a4a71f3323c\",\"type\":\"CDSView\"}},\"id\":\"c6a995e0-8c66-454d-add8-6a0cedf2ea1b\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"line_dash\":[10,4],\"line_width\":{\"value\":2},\"x\":{\"field\":\"zkl_range\"},\"y\":{\"field\":\"zkl_pre\"}},\"id\":\"7b1a355b-c814-4e33-93d8-39466524a876\",\"type\":\"Line\"},{\"attributes\":{\"formatter\":{\"id\":\"80966af3-f91f-4f2e-921e-06fec57c8acc\",\"type\":\"CategoricalTickFormatter\"},\"minor_tick_line_color\":{\"value\":null},\"plot\":{\"id\":\"4d9eeaf8-57ac-4753-9a34-b832d5697f29\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e46cd8b3-b857-4a9e-823a-9a93a47547ee\",\"type\":\"CategoricalTicker\"}},\"id\":\"f059d87b-ff1c-4ab1-9fe7-5cb113a7f653\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"4d9eeaf8-57ac-4753-9a34-b832d5697f29\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e46cd8b3-b857-4a9e-823a-9a93a47547ee\",\"type\":\"CategoricalTicker\"}},\"id\":\"380c0aa0-c337-435a-a5d4-1a477099c0d8\",\"type\":\"Grid\"},{\"attributes\":{\"plot\":null,\"text\":\"\\u5546\\u54c1\\u6298\\u6263\\u7387\\u7edf\\u8ba1\"},\"id\":\"ce341441-e5f8-4802-bc40-0fbbeddf1742\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"ce7ae233-fd75-419a-9011-428b78a044cd\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"e46cd8b3-b857-4a9e-823a-9a93a47547ee\",\"type\":\"CategoricalTicker\"}],\"root_ids\":[\"4d9eeaf8-57ac-4753-9a34-b832d5697f29\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.7\"}};\n",
       "            var render_items = [{\"docid\":\"f804b279-4b6c-437b-804b-610128751fa0\",\"elementid\":\"4cf53d35-22a2-46dd-b6a7-0a1b416aa844\",\"modelid\":\"4d9eeaf8-57ac-4753-9a34-b832d5697f29\"}];\n",
       "            \n",
       "            Bokeh.embed.embed_items(docs_json, render_items);\n",
       "          };\n",
       "          if (document.readyState != \"loading\") fn();\n",
       "          else document.addEventListener(\"DOMContentLoaded\", fn);\n",
       "        })();\n",
       "      },\n",
       "      function(Bokeh) {\n",
       "      }\n",
       "    ];\n",
       "  \n",
       "    function run_inline_js() {\n",
       "      \n",
       "      if ((root.Bokeh !== undefined) || (force === true)) {\n",
       "        for (var i = 0; i < inline_js.length; i++) {\n",
       "          inline_js[i].call(root, root.Bokeh);\n",
       "        }if (force === true) {\n",
       "          display_loaded();\n",
       "        }} else if (Date.now() < root._bokeh_timeout) {\n",
       "        setTimeout(run_inline_js, 100);\n",
       "      } else if (!root._bokeh_failed_load) {\n",
       "        console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
       "        root._bokeh_failed_load = true;\n",
       "      } else if (force !== true) {\n",
       "        var cell = $(document.getElementById(\"4cf53d35-22a2-46dd-b6a7-0a1b416aa844\")).parents('.cell').data().cell;\n",
       "        cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
       "      }\n",
       "  \n",
       "    }\n",
       "  \n",
       "    if (root._bokeh_is_loading === 0) {\n",
       "      console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
       "      run_inline_js();\n",
       "    } else {\n",
       "      load_libs(js_urls, function() {\n",
       "        console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
       "        run_inline_js();\n",
       "      });\n",
       "    }\n",
       "  }(window));\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 用bokeh绘制折线图：x轴为折扣率，y轴为商品数量占比\n",
    "\n",
    "bokeh_data = result3_data2[['id','zkl']].dropna()\n",
    "bokeh_data['zkl_range'] = pd.cut(bokeh_data['zkl'],bins = np.linspace(0,1,21))\n",
    "bokeh_data2 = bokeh_data.groupby('zkl_range').count().iloc[:-1] # 这里去掉折扣率在0.95-1之间的数据，该区间内数据zkl大部分为1，不打折\n",
    "bokeh_data2['zkl_pre'] = bokeh_data2['zkl']/bokeh_data2['zkl'].sum()\n",
    "# 将数据按照折扣率拆分为不同区间，并统计不同1扣率的商品数量\n",
    "\n",
    "source = ColumnDataSource(data=bokeh_data2)\n",
    "# 创建数据\n",
    "\n",
    "lst_brand = bokeh_data2.index.tolist()\n",
    "\n",
    "hover = HoverTool(tooltips=[(\"折扣率\", \"@zkl\")])  # 设置标签显示内容\n",
    "\n",
    "p = figure(x_range=lst_brand, plot_width=900, plot_height=350, title=\"商品折扣率统计\",\n",
    "          tools=[hover,'reset,xwheel_zoom,pan,crosshair'])\n",
    "# 构建绘图空间\n",
    "\n",
    "p.line(x='zkl_range',y='zkl_pre',source = source,     # 设置x，y值, source → 数据源\n",
    "       line_width=2, line_alpha = 0.8, line_color = 'black',line_dash = [10,4])   # 线型基本设置\n",
    "# 绘制折线图\n",
    "p.circle(x='zkl_range',y='zkl_pre',source = source, size = 8,color = 'red',alpha = 0.8)\n",
    "\n",
    "p.xgrid.grid_line_color = None\n",
    "p.axis.minor_tick_line_color = None\n",
    "p.outline_line_color = None\n",
    "# 设置其他参数\n",
    "\n",
    "show(p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       (0, 0.05]\n",
       "1     (0.05, 0.1]\n",
       "2     (0.1, 0.15]\n",
       "3     (0.15, 0.2]\n",
       "4     (0.2, 0.25]\n",
       "5     (0.25, 0.3]\n",
       "6     (0.3, 0.35]\n",
       "7     (0.35, 0.4]\n",
       "8     (0.4, 0.45]\n",
       "9     (0.45, 0.5]\n",
       "10    (0.5, 0.55]\n",
       "11    (0.55, 0.6]\n",
       "12    (0.6, 0.65]\n",
       "13    (0.65, 0.7]\n",
       "14    (0.7, 0.75]\n",
       "15    (0.75, 0.8]\n",
       "16    (0.8, 0.85]\n",
       "17    (0.85, 0.9]\n",
       "18    (0.9, 0.95]\n",
       "Name: zkl_range, dtype: object"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a3 = bokeh_data2.reset_index()\n",
    "a3['zkl_range'].astype(np.str)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "    <div class=\"bk-root\">\n",
       "        <div class=\"bk-plotdiv\" id=\"2a116e0b-8947-4eee-b5c1-7c2b52b25410\"></div>\n",
       "    </div>\n",
       "<script type=\"text/javascript\">\n",
       "  \n",
       "  (function(root) {\n",
       "    function now() {\n",
       "      return new Date();\n",
       "    }\n",
       "  \n",
       "    var force = false;\n",
       "  \n",
       "    if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
       "      root._bokeh_onload_callbacks = [];\n",
       "      root._bokeh_is_loading = undefined;\n",
       "    }\n",
       "  \n",
       "  \n",
       "    \n",
       "    if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
       "      root._bokeh_timeout = Date.now() + 0;\n",
       "      root._bokeh_failed_load = false;\n",
       "    }\n",
       "  \n",
       "    var NB_LOAD_WARNING = {'data': {'text/html':\n",
       "       \"<div style='background-color: #fdd'>\\n\"+\n",
       "       \"<p>\\n\"+\n",
       "       \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
       "       \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
       "       \"</p>\\n\"+\n",
       "       \"<ul>\\n\"+\n",
       "       \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
       "       \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
       "       \"</ul>\\n\"+\n",
       "       \"<code>\\n\"+\n",
       "       \"from bokeh.resources import INLINE\\n\"+\n",
       "       \"output_notebook(resources=INLINE)\\n\"+\n",
       "       \"</code>\\n\"+\n",
       "       \"</div>\"}};\n",
       "  \n",
       "    function display_loaded() {\n",
       "      if (root.Bokeh !== undefined) {\n",
       "        var el = document.getElementById(\"2a116e0b-8947-4eee-b5c1-7c2b52b25410\");\n",
       "        if (el != null) {\n",
       "          el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
       "        }\n",
       "      } else if (Date.now() < root._bokeh_timeout) {\n",
       "        setTimeout(display_loaded, 100)\n",
       "      }\n",
       "    }\n",
       "  \n",
       "  \n",
       "    function run_callbacks() {\n",
       "      try {\n",
       "        root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
       "      }\n",
       "      finally {\n",
       "        delete root._bokeh_onload_callbacks\n",
       "      }\n",
       "      console.info(\"Bokeh: all callbacks have finished\");\n",
       "    }\n",
       "  \n",
       "    function load_libs(js_urls, callback) {\n",
       "      root._bokeh_onload_callbacks.push(callback);\n",
       "      if (root._bokeh_is_loading > 0) {\n",
       "        console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
       "        return null;\n",
       "      }\n",
       "      if (js_urls == null || js_urls.length === 0) {\n",
       "        run_callbacks();\n",
       "        return null;\n",
       "      }\n",
       "      console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
       "      root._bokeh_is_loading = js_urls.length;\n",
       "      for (var i = 0; i < js_urls.length; i++) {\n",
       "        var url = js_urls[i];\n",
       "        var s = document.createElement('script');\n",
       "        s.src = url;\n",
       "        s.async = false;\n",
       "        s.onreadystatechange = s.onload = function() {\n",
       "          root._bokeh_is_loading--;\n",
       "          if (root._bokeh_is_loading === 0) {\n",
       "            console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
       "            run_callbacks()\n",
       "          }\n",
       "        };\n",
       "        s.onerror = function() {\n",
       "          console.warn(\"failed to load library \" + url);\n",
       "        };\n",
       "        console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
       "        document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
       "      }\n",
       "    };var element = document.getElementById(\"2a116e0b-8947-4eee-b5c1-7c2b52b25410\");\n",
       "    if (element == null) {\n",
       "      console.log(\"Bokeh: ERROR: autoload.js configured with elementid '2a116e0b-8947-4eee-b5c1-7c2b52b25410' but no matching script tag was found. \")\n",
       "      return false;\n",
       "    }\n",
       "  \n",
       "    var js_urls = [];\n",
       "  \n",
       "    var inline_js = [\n",
       "      function(Bokeh) {\n",
       "        (function() {\n",
       "          var fn = function() {\n",
       "            var docs_json = {\"c807eaeb-2b10-4efb-9650-e4143acd80d9\":{\"roots\":{\"references\":[{\"attributes\":{\"formatter\":{\"id\":\"ecbfc2e5-deb8-4a36-b615-c31e6f3d998b\",\"type\":\"CategoricalTickFormatter\"},\"plot\":{\"id\":\"95fc0a0e-5a6f-41c3-9c0c-d106c3057f2d\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"dcad460f-6a7c-40ca-a89f-1034e26aa2a4\",\"type\":\"CategoricalTicker\"}},\"id\":\"4c0c1186-8e8f-4018-935f-4124bf4466ca\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"callback\":null},\"id\":\"231a194d-a59a-4141-bfd9-b8b20a4e3277\",\"type\":\"DataRange1d\"},{\"attributes\":{\"plot\":null,\"text\":\"\\u4e0d\\u540c\\u54c1\\u724c\\u6298\\u6263\\u7387\\u60c5\\u51b5\"},\"id\":\"99ce30f7-6e3a-45d9-955d-f7c7471dbdc1\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"c0ba984b-3612-49d9-82f1-96c183e780b8\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"876fb567-9254-469e-99cc-17f0fdc246e0\",\"type\":\"CategoricalScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"zkl\"},\"y\":{\"field\":\"\\u5e97\\u540d_y\",\"transform\":{\"id\":\"94c1e397-6e99-4557-b202-119a19be3dca\",\"type\":\"Jitter\"}}},\"id\":\"3498473c-5608-4ff7-be69-60b0c2a71f7a\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"f5e0c3b7-1ccf-4590-8787-d6ff16fd2cbb\",\"type\":\"PanTool\"},{\"attributes\":{\"callback\":null,\"factors\":[\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7389\\u5170\\u6cb9\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"SKII\",\"\\u5170\\u829d\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u5029\\u78a7\",\"\\u6b27\\u73c0\\u83b1\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u96c5\\u8bd7\\u5170\\u9edb\",\"\\u8d44\\u751f\\u5802\",\"\\u5170\\u853b\",\"\\u96c5\\u6f3e\",\"\\u96ea\\u82b1\\u79c0\",\"\\u690d\\u6751\\u79c0\",\"\\u8587\\u59ff\",\"\\u5a07\\u5170\"]},\"id\":\"82efdbdf-29f7-4aa4-8137-0e4d4b904c61\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"dcad460f-6a7c-40ca-a89f-1034e26aa2a4\",\"type\":\"CategoricalTicker\"},{\"attributes\":{},\"id\":\"f4838a72-990f-4038-9c7e-2571ca8bbe05\",\"type\":\"CrosshairTool\"},{\"attributes\":{\"source\":{\"id\":\"fac91220-a6bb-4067-8d6f-58ca20f5edab\",\"type\":\"ColumnDataSource\"}},\"id\":\"eddd1094-043c-463e-b9ca-2bf56b821bc0\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"fac91220-a6bb-4067-8d6f-58ca20f5edab\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"93148470-e448-438f-9894-455e203b3995\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"3498473c-5608-4ff7-be69-60b0c2a71f7a\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"eddd1094-043c-463e-b9ca-2bf56b821bc0\",\"type\":\"CDSView\"}},\"id\":\"8e56fb6b-7c84-4d7b-8f72-3d79ea26586d\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"dd6be4da-e26a-487b-b7b4-103b3013a930\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"ae396366-3c32-49df-92f5-256698f5e5cc\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.3},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.3},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"zkl\"},\"y\":{\"field\":\"\\u5e97\\u540d_y\",\"transform\":{\"id\":\"94c1e397-6e99-4557-b202-119a19be3dca\",\"type\":\"Jitter\"}}},\"id\":\"93148470-e448-438f-9894-455e203b3995\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"59ea6320-4fc5-48cd-baca-4276a8ce24c3\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"018ff9d4-bff5-4660-9aa9-92a3f170c127\",\"type\":\"HoverTool\"},{\"id\":\"c0ba984b-3612-49d9-82f1-96c183e780b8\",\"type\":\"ResetTool\"},{\"id\":\"c2a04c41-317a-4707-a76c-45c1b469b7b2\",\"type\":\"WheelZoomTool\"},{\"id\":\"f5e0c3b7-1ccf-4590-8787-d6ff16fd2cbb\",\"type\":\"PanTool\"},{\"id\":\"f4838a72-990f-4038-9c7e-2571ca8bbe05\",\"type\":\"CrosshairTool\"}]},\"id\":\"d7c79b9d-7625-497f-a7aa-e0f73ade93d2\",\"type\":\"Toolbar\"},{\"attributes\":{\"formatter\":{\"id\":\"59ea6320-4fc5-48cd-baca-4276a8ce24c3\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"95fc0a0e-5a6f-41c3-9c0c-d106c3057f2d\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"dd6be4da-e26a-487b-b7b4-103b3013a930\",\"type\":\"BasicTicker\"}},\"id\":\"a7022955-6f41-4494-927e-0f7ea04f952b\",\"type\":\"LinearAxis\"},{\"attributes\":{\"dimensions\":\"height\"},\"id\":\"c2a04c41-317a-4707-a76c-45c1b469b7b2\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"range\":{\"id\":\"82efdbdf-29f7-4aa4-8137-0e4d4b904c61\",\"type\":\"FactorRange\"},\"width\":0.6},\"id\":\"94c1e397-6e99-4557-b202-119a19be3dca\",\"type\":\"Jitter\"},{\"attributes\":{\"plot\":{\"id\":\"95fc0a0e-5a6f-41c3-9c0c-d106c3057f2d\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"dd6be4da-e26a-487b-b7b4-103b3013a930\",\"type\":\"BasicTicker\"}},\"id\":\"0f10dad3-6fe1-4bad-b00a-1e26e83313de\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"zkl\",\"id\",\"\\u5e97\\u540d_y\",\"index\"],\"data\":{\"id\":[\"A10027317366\",\"A10588608182\",\"A10847151685\",\"A12229615671\",\"A12454514788\",\"A12455538031\",\"A12456273464\",\"A12458714193\",\"A12459362636\",\"A12542703402\",\"A12566450440\",\"A12577949273\",\"A12591129422\",\"A12620554096\",\"A12620798148\",\"A12643737601\",\"A12669264079\",\"A12707202252\",\"A12753619428\",\"A12976800504\",\"A13020945143\",\"A13047655105\",\"A13073740227\",\"A13106528311\",\"A13291514661\",\"A13421025693\",\"A13493324762\",\"A13674674792\",\"A13675573546\",\"A13676341322\",\"A13897092374\",\"A13898341378\",\"A13903451152\",\"A13956982789\",\"A14173931801\",\"A14269934948\",\"A14300897027\",\"A14412740175\",\"A14454708036\",\"A14752470236\",\"A14913589336\",\"A15009411383\",\"A15069363015\",\"A15172018097\",\"A15182329900\",\"A15246816228\",\"A15246940240\",\"A15246956361\",\"A15247088981\",\"A15248700008\",\"A15248772651\",\"A15585297140\",\"A15648674791\",\"A15857505782\",\"A16084447881\",\"A16278357646\",\"A16332084233\",\"A16438814866\",\"A17008418616\",\"A17010010973\",\"A17017881808\",\"A17018666462\",\"A17065550243\",\"A17270077247\",\"A17298382210\",\"A17299101458\",\"A17309357968\",\"A17379821379\",\"A17440981705\",\"A17443673904\",\"A17475779778\",\"A17475931620\",\"A17501418488\",\"A17555722884\",\"A17606712126\",\"A17704053899\",\"A17798564300\",\"A17819582820\",\"A18024230740\",\"A18031346641\",\"A18054717031\",\"A18126561629\",\"A18137427899\",\"A18177226992\",\"A18190290933\",\"A18191681943\",\"A18346600085\",\"A18422797881\",\"A18468680411\",\"A18603040564\",\"A18616903560\",\"A18628583085\",\"A18629995493\",\"A18631131810\",\"A18631323230\",\"A18634875742\",\"A18705259677\",\"A18981009694\",\"A19000671234\",\"A19008350212\",\"A19009618209\",\"A19111207414\",\"A19159999907\",\"A19191568229\",\"A19371494116\",\"A19478755972\",\"A19490162713\",\"A19504102657\",\"A19743978078\",\"A19757777516\",\"A19759056799\",\"A19772883173\",\"A19883619712\",\"A19886424028\",\"A20057265081\",\"A20173231724\",\"A20192763379\",\"A20192955914\",\"A20199281832\",\"A20355287905\",\"A20419968448\",\"A20438280981\",\"A20446335583\",\"A20553423924\",\"A20621319460\",\"A20628440072\",\"A20831764678\",\"A20847355459\",\"A21301819561\",\"A21625571512\",\"A21725671218\",\"A22027747948\",\"A22151608347\",\"A22151664644\",\"A22152184850\",\"A22152360634\",\"A22211480001\",\"A22266944429\",\"A22404631187\",\"A22427692847\",\"A2251570112\",\"A2251615486\",\"A2252191048\",\"A22523699088\",\"A2253281880\",\"A2253282718\",\"A2253305238\",\"A2253978004\",\"A22671284506\",\"A22708800014\",\"A22739092593\",\"A22739204253\",\"A22878116162\",\"A23213756586\",\"A23280500026\",\"A23560588709\",\"A23587032566\",\"A23640752247\",\"A23830376808\",\"A23925744646\",\"A24087564999\",\"A24257216628\",\"A24304992630\",\"A24543820600\",\"A24544528901\",\"A24544816538\",\"A24599364463\",\"A24599528735\",\"A24612192437\",\"A24612968810\",\"A24613052135\",\"A24931136420\",\"A2519405448\",\"A25255424287\",\"A25913540540\",\"A26631608431\",\"A27351320330\",\"A3096780174\",\"A3213904066\",\"A35260586719\",\"A35266695084\",\"A35286009003\",\"A35317513882\",\"A35345527183\",\"A35409594574\",\"A35452220808\",\"A35463586510\",\"A35468501238\",\"A35514813185\",\"A35515318945\",\"A35515707656\",\"A35515918140\",\"A35516497996\",\"A35521032908\",\"A35533641788\",\"A35534638562\",\"A35535071164\",\"A35539569939\",\"A35539618797\",\"A35540280221\",\"A35574926240\",\"A35576840881\",\"A35581431635\",\"A35599025511\",\"A35734777210\",\"A35736583445\",\"A35788002077\",\"A35852765904\",\"A35853039820\",\"A35855633415\",\"A36128391232\",\"A36294978417\",\"A36548645393\",\"A36549262071\",\"A36716218598\",\"A36719371102\",\"A36732485653\",\"A36737801876\",\"A36810274689\",\"A36813591749\",\"A36816142305\",\"A36827184085\",\"A36970426620\",\"A36978187447\",\"A36981139406\",\"A36984821133\",\"A36996136068\",\"A37116692031\",\"A37194554897\",\"A37241895145\",\"A37242499428\",\"A37336800097\",\"A37346618814\",\"A37354729514\",\"A37388703337\",\"A37429656281\",\"A37436662425\",\"A37928542530\",\"A38012819642\",\"A38135377444\",\"A38544698582\",\"A38682957358\",\"A38817906557\",\"A38889879566\",\"A39190826339\",\"A39244108911\",\"A39289256725\",\"A39294746425\",\"A39315889999\",\"A39439393952\",\"A39788059431\",\"A39876413435\",\"A39901987498\",\"A39980118598\",\"A40270369254\",\"A40389785123\",\"A40530583093\",\"A40704153119\",\"A40825375324\",\"A41139239390\",\"A41161996028\",\"A41175809828\",\"A41198080050\",\"A41210365339\",\"A41210754770\",\"A41214859165\",\"A41216209851\",\"A41268704500\",\"A41315034586\",\"A41319630474\",\"A41337324901\",\"A41340465431\",\"A41381516830\",\"A41413601267\",\"A41451053271\",\"A41466077765\",\"A41614018876\",\"A41639931913\",\"A41647141924\",\"A41715384674\",\"A41781939432\",\"A41796578843\",\"A41866644738\",\"A41870105372\",\"A41904422439\",\"A41907652531\",\"A41943635883\",\"A42018558040\",\"A42058272267\",\"A42152414491\",\"A42152794843\",\"A42367708680\",\"A42405499058\",\"A42414210696\",\"A42458074774\",\"A42537225873\",\"A42591514917\",\"A42612591184\",\"A42625798533\",\"A42634490037\",\"A42690234045\",\"A42736108970\",\"A42772272047\",\"A43129887823\",\"A43249933501\",\"A43386256443\",\"A43388248267\",\"A43431608133\",\"A43447775221\",\"A43453058444\",\"A43462886706\",\"A43540379237\",\"A43563338473\",\"A43595177852\",\"A43609160021\",\"A43684062306\",\"A43687563632\",\"A43904991617\",\"A43976999773\",\"A43999582930\",\"A44038993268\",\"A44148996597\",\"A44239992006\",\"A44245002617\",\"A44274260607\",\"A44381569009\",\"A44441325898\",\"A44461527010\",\"A44472388175\",\"A44679990468\",\"A44758432986\",\"A44801737669\",\"A44933014185\",\"A44947039111\",\"A45241758533\",\"A45308039449\",\"A45324239680\",\"A45470827080\",\"A45539961930\",\"A45546171028\",\"A45548945615\",\"A45558340726\",\"A45575538259\",\"A45747595355\",\"A45771864489\",\"A520127135578\",\"A520136239705\",\"A520251972340\",\"A520305131661\",\"A520307554770\",\"A520374245131\",\"A520419687488\",\"A520423892639\",\"A520425060059\",\"A520430607768\",\"A520430747226\",\"A520547497063\",\"A520637984093\",\"A520684891932\",\"A520712697378\",\"A520825271979\",\"A520854152800\",\"A520897631172\",\"A520964692286\",\"A520974693687\",\"A520975472976\",\"A520976852456\",\"A520977560720\",\"A520978096161\",\"A521225294769\",\"A521230627105\",\"A521241925884\",\"A521245728594\",\"A521250143002\",\"A521500472653\",\"A521502020534\",\"A521504259579\",\"A521848444056\",\"A521893953932\",\"A521998947975\",\"A522149855616\",\"A522151131359\",\"A522151647814\",\"A522163429181\",\"A522165907137\",\"A522166403717\",\"A522168559025\",\"A522168975734\",\"A522169063406\",\"A522172375251\",\"A522173860893\",\"A522174728423\",\"A522183730602\",\"A522183754712\",\"A522184238010\",\"A522184345624\",\"A522184665366\",\"A522184825867\",\"A522187558221\",\"A522187796568\",\"A522188298889\",\"A522188314560\",\"A522188505982\",\"A522188744960\",\"A522189908497\",\"A522216701164\",\"A522541079975\",\"A522552709242\",\"A522562862000\",\"A522578990345\",\"A522585848277\",\"A522643380095\",\"A522647007234\",\"A522666735485\",\"A522679381947\",\"A522690660875\",\"A522962827098\",\"A522967881140\",\"A522969751731\",\"A522982926618\",\"A522999722521\",\"A523001193725\",\"A523001449293\",\"A523008724215\",\"A523052955928\",\"A523195635862\",\"A523225736031\",\"A523253168784\",\"A523258072413\",\"A523276436649\",\"A523277038210\",\"A523288067188\",\"A523288387068\",\"A523289215353\",\"A523290967915\",\"A523291039415\",\"A523292431618\",\"A523293839293\",\"A523307602801\",\"A523308464515\",\"A523308646627\",\"A523310194813\",\"A523312670312\",\"A523313698288\",\"A523314018919\",\"A523317045266\",\"A523317100804\",\"A523317149823\",\"A523317909035\",\"A523318001141\",\"A523318180035\",\"A523319296060\",\"A523319744273\",\"A523320252196\",\"A523320800897\",\"A523321828028\",\"A523322856826\",\"A523333903531\",\"A523348627642\",\"A523359341105\",\"A523364254385\",\"A523365892666\",\"A523370537236\",\"A523377736681\",\"A523377820371\",\"A523381900830\",\"A523724723196\",\"A523733591414\",\"A523747062102\",\"A523753968383\",\"A523756010417\",\"A523762111206\",\"A523762319680\",\"A523762699305\",\"A523763247485\",\"A523773273602\",\"A523780360913\",\"A523780660581\",\"A523783925176\",\"A523785746662\",\"A523786294068\",\"A523787214703\",\"A523794088841\",\"A523797832310\",\"A523901880223\",\"A523963959459\",\"A523968722299\",\"A523988377936\",\"A523988589994\",\"A524078677314\",\"A524104552256\",\"A524421274975\",\"A524428567884\",\"A524432597152\",\"A524446570422\",\"A524825707579\",\"A524866297849\",\"A525040315257\",\"A525751799602\",\"A526115151470\",\"A526115179226\",\"A526250122702\",\"A526274580793\",\"A526419961142\",\"A526458268742\",\"A526489894668\",\"A526498885740\",\"A526514707555\",\"A526545791251\",\"A526560629576\",\"A526924991236\",\"A526979160804\",\"A527052101951\",\"A527132263876\",\"A527322548855\",\"A527325492991\",\"A527341127188\",\"A527617647830\",\"A527720825805\",\"A527736460514\",\"A527880322360\",\"A527995811914\",\"A527996211289\",\"A527996319335\",\"A528011776813\",\"A528038402645\",\"A528040114163\",\"A528051609730\",\"A528051985381\",\"A528067216791\",\"A528069808107\",\"A528101929150\",\"A528104113264\",\"A528180566722\",\"A528214164460\",\"A528463274963\",\"A528516384296\",\"A528538727048\",\"A528538827594\",\"A528586310613\",\"A528587158146\",\"A528587218264\",\"A528621008747\",\"A528745013920\",\"A528795014793\",\"A529001931180\",\"A529043120669\",\"A529403182491\",\"A529456679612\",\"A529507484159\",\"A529676963709\",\"A530167759790\",\"A530493823381\",\"A530588512969\",\"A530869992309\",\"A530883430699\",\"A531154676673\",\"A531241809544\",\"A531291737977\",\"A531338636494\",\"A531492926930\",\"A531541399265\",\"A531927803098\",\"A532083724818\",\"A532598163879\",\"A532646427195\",\"A532681661677\",\"A532740593400\",\"A532759124875\",\"A532804891498\",\"A533070764354\",\"A533322292214\",\"A533763057295\",\"A534148292967\",\"A534266666696\",\"A534268224523\",\"A534268496859\",\"A534314678636\",\"A534706468954\",\"A534804895830\",\"A534821051756\",\"A535044296232\",\"A535633791462\",\"A535635271617\",\"A535689862710\",\"A536808610828\",\"A536881052520\",\"A537340971083\",\"A537493051770\",\"A537536839003\",\"A537612957761\",\"A537613126508\",\"A537647976041\",\"A537653165949\",\"A537778938843\",\"A537827181409\",\"A537884294758\",\"A537889917370\",\"A537981807976\",\"A538043767299\",\"A538047579701\",\"A538083980831\",\"A538105552908\",\"A538120665097\",\"A538152712158\",\"A538167073426\",\"A538191372755\",\"A538325602451\",\"A538338886309\",\"A538466189350\",\"A538579304581\",\"A538732357530\",\"A538744048445\",\"A538752599902\",\"A538758716132\",\"A538766297543\",\"A538832999955\",\"A538834267757\",\"A538913952150\",\"A538993276571\",\"A539340646066\",\"A539341851212\",\"A539343210732\",\"A539343870010\",\"A539344100318\",\"A539726354629\",\"A539733427789\",\"A539753728148\",\"A539753747235\",\"A539755110033\",\"A539756246009\",\"A539756269930\",\"A539756566491\",\"A539784704929\",\"A539789155030\",\"A539793941051\",\"A539797804513\",\"A539802407409\",\"A539848263574\",\"A539849255075\",\"A539849669270\",\"A539852767615\",\"A539852808238\",\"A539852908698\",\"A539854255262\",\"A539854888277\",\"A539855652658\",\"A539855746548\",\"A539856236019\",\"A539856532063\",\"A539856797112\",\"A539856895171\",\"A539857047738\",\"A539857501037\",\"A539857523299\",\"A539857922859\",\"A539919712722\",\"A539921130416\",\"A539921434191\",\"A539961349170\",\"A539963361968\",\"A539967803575\",\"A540021300133\",\"A540024035676\",\"A540032500522\",\"A540059696598\",\"A540084337255\",\"A540138323496\",\"A540139054319\",\"A540139726734\",\"A540215001957\",\"A540219520384\",\"A540232536550\",\"A540321892238\",\"A540329186274\",\"A540329718412\",\"A540330549271\",\"A540331250416\",\"A540331431199\",\"A540337512471\",\"A540338060494\",\"A540447415662\",\"A540509108791\",\"A540519843031\",\"A540598040173\",\"A540598328401\",\"A540630827076\",\"A540638275835\",\"A540679595657\",\"A540685861901\",\"A540689825085\",\"A540728658582\",\"A540740856928\",\"A540749346166\",\"A540749662875\",\"A540777469976\",\"A540780482438\",\"A540796858993\",\"A540803695615\",\"A540806162978\",\"A540806377763\",\"A540809801409\",\"A540909919807\",\"A540910018966\",\"A541133237689\",\"A541169805661\",\"A541186137979\",\"A541195803725\",\"A541369708508\",\"A541444436231\",\"A541444460738\",\"A541455153440\",\"A541463438061\",\"A541463782134\",\"A541468109577\",\"A541469323459\",\"A541477522220\",\"A541563512670\",\"A6362027578\",\"A7553684963\",\"A7553688019\",\"A7553839341\",\"A7553917179\",\"A7554033421\",\"A7554053749\",\"A7554121727\",\"A7554134183\",\"A7554193521\",\"A7554201793\",\"A7554283423\",\"A7554361103\",\"A7717096217\",\"A7765768931\",\"A7765911581\",\"A7765916637\",\"A7765942933\",\"A7765954997\",\"A7765957605\",\"A7765959317\",\"A7765964725\",\"A7766034779\",\"A7766035467\",\"A7766070921\",\"A7766072313\",\"A7766223455\",\"A7766228559\",\"A7766427457\",\"A7766432913\",\"A7766439761\",\"A7894937556\",\"A7895038716\",\"A7895042908\",\"A7901166676\",\"A7901269404\",\"A7904836346\",\"A7904919648\",\"A7904919860\",\"A8231807901\",\"A8433031697\",\"A8544828820\",\"A8622375411\",\"A8622596123\",\"A8622675115\",\"A8622812873\",\"A8642874620\",\"A8643000040\",\"A8720991735\",\"A8720999359\",\"A9049260660\",\"A9344010949\",\"A9481514059\",\"A9481926261\",\"A9483622667\",\"A9525570177\",\"A9552556003\",\"A9552956907\",\"A9554899141\",\"A9555026921\",\"A9555416417\",\"A9555524581\",\"A9609851200\",\"A9703525117\",\"A9709829810\",\"A9768255247\"],\"index\":[0,1,2,4,7,8,9,10,11,15,17,19,26,34,35,37,39,41,50,56,59,65,72,73,75,76,77,78,79,80,81,83,84,87,94,96,97,98,99,103,108,113,115,116,118,122,123,124,125,126,127,137,138,149,152,170,173,177,197,200,203,204,209,215,217,218,219,220,221,222,223,224,225,227,234,244,245,246,251,252,253,255,256,260,266,268,295,300,304,316,320,323,324,327,328,331,340,352,358,359,360,364,368,369,381,384,385,386,394,396,397,399,401,402,407,412,416,417,418,437,438,439,440,445,450,451,454,456,467,472,473,476,483,484,485,487,490,491,493,494,504,506,507,508,510,511,513,517,523,524,525,526,528,530,532,539,540,541,542,544,546,547,548,553,554,556,561,562,564,565,566,589,599,600,609,624,627,635,636,648,650,653,655,656,662,666,668,669,670,672,673,674,676,677,678,679,680,682,683,684,691,696,711,719,722,723,724,726,727,728,732,737,743,744,748,749,750,751,754,755,756,758,766,768,770,771,772,777,778,779,780,783,784,786,793,794,795,805,806,811,828,864,873,877,899,902,907,909,911,912,921,923,925,930,941,945,947,954,957,984,986,989,991,993,994,996,997,1003,1017,1018,1026,1028,1050,1059,1063,1064,1069,1071,1072,1075,1081,1083,1097,1098,1100,1101,1105,1110,1114,1119,1120,1133,1139,1140,1147,1148,1152,1155,1156,1157,1162,1163,1164,1191,1231,1252,1254,1258,1261,1262,1263,1273,1275,1277,1282,1288,1289,1315,1320,1321,1324,1329,1335,1338,1341,1349,1352,1354,1355,1373,1377,1381,1394,1395,1410,1414,1415,1420,1427,1428,1429,1430,1432,1458,1460,1464,1466,1482,1486,1488,1499,1513,1516,1517,1518,1519,1534,1538,1544,1548,1569,1579,1581,1598,1602,1604,1605,1606,1607,1643,1645,1646,1648,1650,1662,1663,1666,1699,1701,1704,1722,1723,1724,1726,1731,1732,1734,1735,1736,1737,1738,1740,1741,1742,1743,1744,1745,1746,1748,1749,1750,1751,1752,1754,1755,1762,1768,1771,1777,1786,1788,1794,1796,1797,1799,1800,1807,1809,1810,1812,1813,1814,1815,1816,1820,1828,1831,1835,1841,1846,1847,1854,1855,1857,1859,1860,1861,1862,1863,1865,1866,1867,1868,1869,1870,1871,1872,1873,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1886,1889,1890,1891,1895,1898,1899,1901,1909,1911,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1928,1932,1933,1934,1937,1938,1940,1949,1950,1958,1959,1962,1965,1979,1980,1981,1982,1994,1999,2001,2020,2040,2041,2085,2090,2096,2102,2103,2104,2105,2107,2110,2116,2121,2131,2151,2167,2168,2170,2190,2197,2199,2201,2208,2209,2210,2213,2219,2220,2221,2222,2225,2226,2229,2230,2232,2237,2275,2279,2280,2281,2282,2283,2284,2287,2291,2295,2302,2309,2330,2334,2335,2341,2352,2410,2414,2436,2437,2445,2456,2458,2461,2464,2467,2485,2499,2513,2520,2523,2534,2535,2536,2546,2549,2555,2565,2571,2572,2573,2576,2591,2597,2598,2603,2623,2624,2627,2673,2682,2695,2705,2711,2718,2719,2723,2724,2730,2733,2737,2738,2743,2754,2755,2759,2762,2765,2768,2770,2771,2779,2782,2791,2804,2839,2840,2841,2844,2848,2859,2860,2870,2881,2921,2923,2925,2926,2927,2956,2958,2964,2965,2966,2967,2968,2969,2970,2972,2974,2978,2979,2986,2987,2988,2989,2990,2991,2993,2994,2995,2996,2997,2998,2999,3001,3002,3004,3005,3006,3045,3047,3048,3055,3057,3068,3114,3115,3119,3131,3149,3150,3151,3152,3161,3170,3180,3192,3193,3194,3195,3196,3197,3198,3199,3205,3207,3208,3210,3211,3224,3226,3243,3256,3266,3281,3283,3286,3288,3306,3307,3313,3322,3327,3328,3331,3340,3341,3357,3360,3367,3373,3377,3387,3388,3390,3393,3394,3397,3398,3402,3405,3411,3413,3415,3416,3417,3418,3419,3420,3421,3422,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3452,3455,3456,3459,3460,3463,3465,3466,3471,3472,3473,3475,3476,3477,3478,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501],\"zkl\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[784]},\"\\u5e97\\u540d_y\":[\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u7389\\u5170\\u6cb9\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7389\\u5170\\u6cb9\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7389\\u5170\\u6cb9\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u7389\\u5170\\u6cb9\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u6b27\\u73c0\\u83b1\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u4f70\\u8349\\u96c6\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u4f70\\u8349\\u96c6\",\"\\u81ea\\u7136\\u5802\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u6b27\\u73c0\\u83b1\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u7389\\u5170\\u6cb9\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u6b27\\u83b1\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u6b27\\u83b1\\u96c5\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u4f70\\u8349\\u96c6\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u81ea\\u7136\\u5802\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u6b27\\u83b1\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7389\\u5170\\u6cb9\",\"\\u6b27\\u73c0\\u83b1\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u6b27\\u83b1\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u5170\\u853b\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u6b27\\u73c0\\u83b1\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u81ea\\u7136\\u5802\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u7389\\u5170\\u6cb9\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u81ea\\u7136\\u5802\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7389\\u5170\\u6cb9\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7389\\u5170\\u6cb9\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u7389\\u5170\\u6cb9\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u7389\\u5170\\u6cb9\",\"\\u6b27\\u83b1\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u6b27\\u83b1\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u6b27\\u73c0\\u83b1\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u4f70\\u8349\\u96c6\",\"\\u81ea\\u7136\\u5802\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7389\\u5170\\u6cb9\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7389\\u5170\\u6cb9\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7389\\u5170\\u6cb9\",\"\\u81ea\\u7136\\u5802\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u7389\\u5170\\u6cb9\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7389\\u5170\\u6cb9\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7389\\u5170\\u6cb9\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7389\\u5170\\u6cb9\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u81ea\\u7136\\u5802\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u4f70\\u8349\\u96c6\",\"\\u7389\\u5170\\u6cb9\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u8587\\u59ff\",\"\\u81ea\\u7136\\u5802\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u6b27\\u73c0\\u83b1\",\"\\u81ea\\u7136\\u5802\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u6b27\\u83b1\\u96c5\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u6b27\\u83b1\\u96c5\",\"\\u8587\\u59ff\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u8587\\u59ff\",\"\\u8587\\u59ff\",\"\\u6b27\\u83b1\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u6b27\\u83b1\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7389\\u5170\\u6cb9\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u5170\\u829d\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u81ea\\u7136\\u5802\",\"\\u6b27\\u83b1\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u4f70\\u8349\\u96c6\",\"\\u7389\\u5170\\u6cb9\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u6b27\\u83b1\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u81ea\\u7136\\u5802\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u81ea\\u7136\\u5802\",\"\\u4f70\\u8349\\u96c6\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u5170\\u829d\",\"\\u7389\\u5170\\u6cb9\",\"\\u4f70\\u8349\\u96c6\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u81ea\\u7136\\u5802\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u8587\\u59ff\",\"\\u8587\\u59ff\",\"\\u5a07\\u5170\",\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u73c0\\u83b1\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u871c\\u4e1d\\u4f5b\\u9640\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u73c0\\u83b1\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7389\\u5170\\u6cb9\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u5170\\u829d\",\"\\u6b27\\u83b1\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u6b27\\u83b1\\u96c5\",\"\\u6b27\\u83b1\\u96c5\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u4f70\\u8349\\u96c6\"]}},\"id\":\"fac91220-a6bb-4067-8d6f-58ca20f5edab\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"ecbfc2e5-deb8-4a36-b615-c31e6f3d998b\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"dimension\":1,\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"95fc0a0e-5a6f-41c3-9c0c-d106c3057f2d\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"dcad460f-6a7c-40ca-a89f-1034e26aa2a4\",\"type\":\"CategoricalTicker\"}},\"id\":\"97d4f95c-1956-47a6-8f9f-2b682367c41b\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"\\u6298\\u6263\\u7387\",\"@zkl\"]]},\"id\":\"018ff9d4-bff5-4660-9aa9-92a3f170c127\",\"type\":\"HoverTool\"},{\"attributes\":{\"below\":[{\"id\":\"a7022955-6f41-4494-927e-0f7ea04f952b\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"4c0c1186-8e8f-4018-935f-4124bf4466ca\",\"type\":\"CategoricalAxis\"}],\"plot_width\":800,\"renderers\":[{\"id\":\"a7022955-6f41-4494-927e-0f7ea04f952b\",\"type\":\"LinearAxis\"},{\"id\":\"0f10dad3-6fe1-4bad-b00a-1e26e83313de\",\"type\":\"Grid\"},{\"id\":\"4c0c1186-8e8f-4018-935f-4124bf4466ca\",\"type\":\"CategoricalAxis\"},{\"id\":\"97d4f95c-1956-47a6-8f9f-2b682367c41b\",\"type\":\"Grid\"},{\"id\":\"8e56fb6b-7c84-4d7b-8f72-3d79ea26586d\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"99ce30f7-6e3a-45d9-955d-f7c7471dbdc1\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"d7c79b9d-7625-497f-a7aa-e0f73ade93d2\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"231a194d-a59a-4141-bfd9-b8b20a4e3277\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"ae396366-3c32-49df-92f5-256698f5e5cc\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"82efdbdf-29f7-4aa4-8137-0e4d4b904c61\",\"type\":\"FactorRange\"},\"y_scale\":{\"id\":\"876fb567-9254-469e-99cc-17f0fdc246e0\",\"type\":\"CategoricalScale\"}},\"id\":\"95fc0a0e-5a6f-41c3-9c0c-d106c3057f2d\",\"subtype\":\"Figure\",\"type\":\"Plot\"}],\"root_ids\":[\"95fc0a0e-5a6f-41c3-9c0c-d106c3057f2d\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.7\"}};\n",
       "            var render_items = [{\"docid\":\"c807eaeb-2b10-4efb-9650-e4143acd80d9\",\"elementid\":\"2a116e0b-8947-4eee-b5c1-7c2b52b25410\",\"modelid\":\"95fc0a0e-5a6f-41c3-9c0c-d106c3057f2d\"}];\n",
       "            \n",
       "            Bokeh.embed.embed_items(docs_json, render_items);\n",
       "          };\n",
       "          if (document.readyState != \"loading\") fn();\n",
       "          else document.addEventListener(\"DOMContentLoaded\", fn);\n",
       "        })();\n",
       "      },\n",
       "      function(Bokeh) {\n",
       "      }\n",
       "    ];\n",
       "  \n",
       "    function run_inline_js() {\n",
       "      \n",
       "      if ((root.Bokeh !== undefined) || (force === true)) {\n",
       "        for (var i = 0; i < inline_js.length; i++) {\n",
       "          inline_js[i].call(root, root.Bokeh);\n",
       "        }if (force === true) {\n",
       "          display_loaded();\n",
       "        }} else if (Date.now() < root._bokeh_timeout) {\n",
       "        setTimeout(run_inline_js, 100);\n",
       "      } else if (!root._bokeh_failed_load) {\n",
       "        console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
       "        root._bokeh_failed_load = true;\n",
       "      } else if (force !== true) {\n",
       "        var cell = $(document.getElementById(\"2a116e0b-8947-4eee-b5c1-7c2b52b25410\")).parents('.cell').data().cell;\n",
       "        cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
       "      }\n",
       "  \n",
       "    }\n",
       "  \n",
       "    if (root._bokeh_is_loading === 0) {\n",
       "      console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
       "      run_inline_js();\n",
       "    } else {\n",
       "      load_libs(js_urls, function() {\n",
       "        console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
       "        run_inline_js();\n",
       "      });\n",
       "    }\n",
       "  }(window));\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 按照品牌分析，不同品牌的打折力度\n",
    "# 用bokeh绘制浮动散点图，y坐标为品牌类型，x坐标为折扣力度\n",
    "\n",
    "from bokeh.transform import jitter\n",
    "\n",
    "brands = result3_data2['店名_y'].dropna().unique().tolist()\n",
    "# 得到y坐标\n",
    "\n",
    "bokeh_data = result3_data2[['id','zkl','店名_y']].dropna()\n",
    "bokeh_data = bokeh_data[bokeh_data['zkl'] < 0.95]\n",
    "source = ColumnDataSource(data = bokeh_data)\n",
    "# 创建数据\n",
    "\n",
    "hover = HoverTool(tooltips=[(\"折扣率\", \"@zkl\")])  # 设置标签显示内容\n",
    "\n",
    "p = figure(plot_width=800, plot_height=600,y_range=brands,title=\"不同品牌折扣率情况\",\n",
    "          tools=[hover,'reset,ywheel_zoom,pan,crosshair'])\n",
    "\n",
    "p.circle(x='zkl', \n",
    "         y=jitter('店名_y', width=0.6, range=p.y_range),\n",
    "         source=source, alpha=0.3)\n",
    "# jitter参数 → 'day'：第一参数，这里指y的值，width：间隔宽度比例，range：分类范围对象，这里和y轴的分类一致\n",
    "\n",
    "p.ygrid.grid_line_color = None\n",
    "# 设置其他参数\n",
    "\n",
    "show(p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "'''\n",
    "3、商家营销套路挖掘？\n",
    "要求：\n",
    "① 解析出不同品牌的参与打折商品比例及折扣力度，并做散点图，总结打折套路\n",
    "   * 用bokeh绘制散点图，x轴为参与打折商品比例，y轴为折扣力度，点的大小代表该品牌参加双11活动的商品总数\n",
    "提示：\n",
    "① 折扣力度为该品牌所有打折商品的折扣均值，这里去掉品牌中不打折的数据\n",
    "② 绘制散点图后，可以将x、y轴绘制均值辅助线，将绘图空间分为四个象限，基于该象限来总结套路\n",
    "\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>period_x</th>\n",
       "      <th>price_x</th>\n",
       "      <th>店名_x</th>\n",
       "      <th>period_y</th>\n",
       "      <th>price_y</th>\n",
       "      <th>店名_y</th>\n",
       "      <th>zkl</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A10027317366</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>159.00</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>258.0</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>0.616279</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>A10588608182</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>189.00</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>249.0</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>0.759036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>A10847151685</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>125.99</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>240.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.524958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A12229499633</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>49.0</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A12229615671</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>39.50</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>79.0</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>0.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>A12229695732</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>69.0</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>A12454406919</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>99.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>A12454514788</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>79.00</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>89.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>0.887640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>A12455538031</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>69.00</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>79.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>0.873418</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>A12456273464</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>62.00</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>69.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>0.898551</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>A12458714193</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>71.00</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>79.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>0.898734</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>A12459362636</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>89.00</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>99.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>0.898990</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>A12459717064</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>109.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>A12459730213</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>69.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>A12460337412</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>99.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>A12542703402</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>98.00</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>109.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>0.899083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>A12544615139</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>24.0</td>\n",
       "      <td>美宝莲</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>A12566450440</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>270.00</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>360.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>A12568149245</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>130.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>A12577949273</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>388.00</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>500.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>0.776000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>A12582438336</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>85.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>A12584353551</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>A12587474359</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>75.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>A12588149499</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>59.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>A12589838012</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>340.00</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>340.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>A12589846591</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>240.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>A12591129422</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>179.00</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>250.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>0.716000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>A12597290919</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>45.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>A12602146958</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>200.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>A12605758944</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>75.0</td>\n",
       "      <td>玉兰油</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3472</th>\n",
       "      <td>A8433031697</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>42.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>60.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3473</th>\n",
       "      <td>A8544828820</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>59.00</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>119.0</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>0.495798</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3474</th>\n",
       "      <td>A8608548912</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>150.00</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>150.0</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3475</th>\n",
       "      <td>A8622375411</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>210.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>300.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3476</th>\n",
       "      <td>A8622596123</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>182.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>260.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3477</th>\n",
       "      <td>A8622675115</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>294.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>420.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3478</th>\n",
       "      <td>A8622812873</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>252.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>360.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3479</th>\n",
       "      <td>A8642686870</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>230.0</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3480</th>\n",
       "      <td>A8642687670</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>189.0</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3481</th>\n",
       "      <td>A8642873740</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>170.00</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>170.0</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3482</th>\n",
       "      <td>A8642874620</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>179.00</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>190.0</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>0.942105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3483</th>\n",
       "      <td>A8643000040</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>178.00</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>220.0</td>\n",
       "      <td>欧莱雅</td>\n",
       "      <td>0.809091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3484</th>\n",
       "      <td>A8720991735</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>90.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3485</th>\n",
       "      <td>A8720999359</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>90.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3486</th>\n",
       "      <td>A9049260660</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>49.50</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>105.0</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>0.471429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3487</th>\n",
       "      <td>A9344010949</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>112.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>160.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3488</th>\n",
       "      <td>A9481514059</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>294.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>420.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3489</th>\n",
       "      <td>A9481926261</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>154.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>220.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3490</th>\n",
       "      <td>A9483622667</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>251.99</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>360.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.699972</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3491</th>\n",
       "      <td>A9525570177</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>84.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3492</th>\n",
       "      <td>A9552556003</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>90.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3493</th>\n",
       "      <td>A9552956907</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>90.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3494</th>\n",
       "      <td>A9554899141</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>81.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>120.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.675000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3495</th>\n",
       "      <td>A9555026921</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>45.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>60.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3496</th>\n",
       "      <td>A9555416417</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>120.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>160.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3497</th>\n",
       "      <td>A9555524581</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>224.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>320.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3498</th>\n",
       "      <td>A9609851200</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>44.50</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>89.0</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>0.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3499</th>\n",
       "      <td>A9703525117</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>196.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>280.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3500</th>\n",
       "      <td>A9709829810</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>49.50</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>99.0</td>\n",
       "      <td>相宜本草</td>\n",
       "      <td>0.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3501</th>\n",
       "      <td>A9768255247</td>\n",
       "      <td>双十一当天</td>\n",
       "      <td>159.00</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>双十一前</td>\n",
       "      <td>308.0</td>\n",
       "      <td>佰草集</td>\n",
       "      <td>0.516234</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3502 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                id period_x  price_x  店名_x period_y  price_y  店名_y       zkl\n",
       "0     A10027317366    双十一当天   159.00  相宜本草     双十一前    258.0  相宜本草  0.616279\n",
       "1     A10588608182    双十一当天   189.00   欧莱雅     双十一前    249.0   欧莱雅  0.759036\n",
       "2     A10847151685    双十一当天   125.99   佰草集     双十一前    240.0   佰草集  0.524958\n",
       "3     A12229499633    双十一当天      NaN   NaN     双十一前     49.0  相宜本草       NaN\n",
       "4     A12229615671    双十一当天    39.50  相宜本草     双十一前     79.0  相宜本草  0.500000\n",
       "5     A12229695732    双十一当天      NaN   NaN     双十一前     69.0  相宜本草       NaN\n",
       "6     A12454406919    双十一当天      NaN   NaN     双十一前     99.0   美宝莲       NaN\n",
       "7     A12454514788    双十一当天    79.00   美宝莲     双十一前     89.0   美宝莲  0.887640\n",
       "8     A12455538031    双十一当天    69.00   美宝莲     双十一前     79.0   美宝莲  0.873418\n",
       "9     A12456273464    双十一当天    62.00   美宝莲     双十一前     69.0   美宝莲  0.898551\n",
       "10    A12458714193    双十一当天    71.00   美宝莲     双十一前     79.0   美宝莲  0.898734\n",
       "11    A12459362636    双十一当天    89.00   美宝莲     双十一前     99.0   美宝莲  0.898990\n",
       "12    A12459717064    双十一当天      NaN   NaN     双十一前    109.0   美宝莲       NaN\n",
       "13    A12459730213    双十一当天      NaN   NaN     双十一前     69.0   美宝莲       NaN\n",
       "14    A12460337412    双十一当天      NaN   NaN     双十一前     99.0   美宝莲       NaN\n",
       "15    A12542703402    双十一当天    98.00   美宝莲     双十一前    109.0   美宝莲  0.899083\n",
       "16    A12544615139    双十一当天      NaN   NaN     双十一前     24.0   美宝莲       NaN\n",
       "17    A12566450440    双十一当天   270.00   玉兰油     双十一前    360.0   玉兰油  0.750000\n",
       "18    A12568149245    双十一当天      NaN   NaN     双十一前    130.0   玉兰油       NaN\n",
       "19    A12577949273    双十一当天   388.00   玉兰油     双十一前    500.0   玉兰油  0.776000\n",
       "20    A12582438336    双十一当天      NaN   NaN     双十一前     85.0   玉兰油       NaN\n",
       "21    A12584353551    双十一当天      NaN   NaN     双十一前    120.0   玉兰油       NaN\n",
       "22    A12587474359    双十一当天      NaN   NaN     双十一前     75.0   玉兰油       NaN\n",
       "23    A12588149499    双十一当天      NaN   NaN     双十一前     59.0   玉兰油       NaN\n",
       "24    A12589838012    双十一当天   340.00   玉兰油     双十一前    340.0   玉兰油  1.000000\n",
       "25    A12589846591    双十一当天      NaN   NaN     双十一前    240.0   玉兰油       NaN\n",
       "26    A12591129422    双十一当天   179.00   玉兰油     双十一前    250.0   玉兰油  0.716000\n",
       "27    A12597290919    双十一当天      NaN   NaN     双十一前     45.0   玉兰油       NaN\n",
       "28    A12602146958    双十一当天      NaN   NaN     双十一前    200.0   玉兰油       NaN\n",
       "29    A12605758944    双十一当天      NaN   NaN     双十一前     75.0   玉兰油       NaN\n",
       "...            ...      ...      ...   ...      ...      ...   ...       ...\n",
       "3472   A8433031697    双十一当天    42.00   佰草集     双十一前     60.0   佰草集  0.700000\n",
       "3473   A8544828820    双十一当天    59.00  相宜本草     双十一前    119.0  相宜本草  0.495798\n",
       "3474   A8608548912    双十一当天   150.00   欧莱雅     双十一前    150.0   欧莱雅  1.000000\n",
       "3475   A8622375411    双十一当天   210.00   佰草集     双十一前    300.0   佰草集  0.700000\n",
       "3476   A8622596123    双十一当天   182.00   佰草集     双十一前    260.0   佰草集  0.700000\n",
       "3477   A8622675115    双十一当天   294.00   佰草集     双十一前    420.0   佰草集  0.700000\n",
       "3478   A8622812873    双十一当天   252.00   佰草集     双十一前    360.0   佰草集  0.700000\n",
       "3479   A8642686870    双十一当天      NaN   NaN     双十一前    230.0   欧莱雅       NaN\n",
       "3480   A8642687670    双十一当天      NaN   NaN     双十一前    189.0   欧莱雅       NaN\n",
       "3481   A8642873740    双十一当天   170.00   欧莱雅     双十一前    170.0   欧莱雅  1.000000\n",
       "3482   A8642874620    双十一当天   179.00   欧莱雅     双十一前    190.0   欧莱雅  0.942105\n",
       "3483   A8643000040    双十一当天   178.00   欧莱雅     双十一前    220.0   欧莱雅  0.809091\n",
       "3484   A8720991735    双十一当天    90.00   佰草集     双十一前    120.0   佰草集  0.750000\n",
       "3485   A8720999359    双十一当天    90.00   佰草集     双十一前    120.0   佰草集  0.750000\n",
       "3486   A9049260660    双十一当天    49.50  相宜本草     双十一前    105.0  相宜本草  0.471429\n",
       "3487   A9344010949    双十一当天   112.00   佰草集     双十一前    160.0   佰草集  0.700000\n",
       "3488   A9481514059    双十一当天   294.00   佰草集     双十一前    420.0   佰草集  0.700000\n",
       "3489   A9481926261    双十一当天   154.00   佰草集     双十一前    220.0   佰草集  0.700000\n",
       "3490   A9483622667    双十一当天   251.99   佰草集     双十一前    360.0   佰草集  0.699972\n",
       "3491   A9525570177    双十一当天    84.00   佰草集     双十一前    120.0   佰草集  0.700000\n",
       "3492   A9552556003    双十一当天    90.00   佰草集     双十一前    120.0   佰草集  0.750000\n",
       "3493   A9552956907    双十一当天    90.00   佰草集     双十一前    120.0   佰草集  0.750000\n",
       "3494   A9554899141    双十一当天    81.00   佰草集     双十一前    120.0   佰草集  0.675000\n",
       "3495   A9555026921    双十一当天    45.00   佰草集     双十一前     60.0   佰草集  0.750000\n",
       "3496   A9555416417    双十一当天   120.00   佰草集     双十一前    160.0   佰草集  0.750000\n",
       "3497   A9555524581    双十一当天   224.00   佰草集     双十一前    320.0   佰草集  0.700000\n",
       "3498   A9609851200    双十一当天    44.50  相宜本草     双十一前     89.0  相宜本草  0.500000\n",
       "3499   A9703525117    双十一当天   196.00   佰草集     双十一前    280.0   佰草集  0.700000\n",
       "3500   A9709829810    双十一当天    49.50  相宜本草     双十一前     99.0  相宜本草  0.500000\n",
       "3501   A9768255247    双十一当天   159.00   佰草集     双十一前    308.0   佰草集  0.516234\n",
       "\n",
       "[3502 rows x 8 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 解析出不同品牌的参与打折商品比例及折扣力度，并做散点图，总结打折套路\n",
    "\n",
    "data_zk = result3_data2[result3_data2['zkl']<0.95]  # 删除未打折数据\n",
    "result4_zkld = data_zk.groupby('店名_y')['zkl'].mean()\n",
    "# 筛选出不同品牌的折扣率\n",
    "\n",
    "n_dz = data_zk['店名_y'].value_counts()\n",
    "n_zs = result3_data2['店名_y'].value_counts()\n",
    "result4_dzspbl = pd.DataFrame({'打折商品数':n_dz,'商品总数':n_zs})\n",
    "result4_dzspbl['参与打折商品比例'] = result4_dzspbl['打折商品数'] / result4_dzspbl['商品总数']\n",
    "result4_dzspbl.dropna(inplace = True)\n",
    "#print(result4_dzspbl.head())\n",
    "# 计算出不同品牌参与打折商品比例\n",
    "\n",
    "result4_sum = result2_data.copy()\n",
    "# 筛选出品牌参加双11活动的商品总数\n",
    "\n",
    "result4_data = pd.merge(pd.DataFrame(result4_zkld),result4_dzspbl,left_index = True, right_index = True, how = 'inner')\n",
    "result4_data = pd.merge(result4_data,result4_sum,left_index = True, right_index = True, how = 'inner')\n",
    "# 合并数据\n",
    "\n",
    "result3_data2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "    <div class=\"bk-root\">\n",
       "        <div class=\"bk-plotdiv\" id=\"522db170-42ce-4985-8db5-65816e605508\"></div>\n",
       "    </div>\n",
       "<script type=\"text/javascript\">\n",
       "  \n",
       "  (function(root) {\n",
       "    function now() {\n",
       "      return new Date();\n",
       "    }\n",
       "  \n",
       "    var force = false;\n",
       "  \n",
       "    if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
       "      root._bokeh_onload_callbacks = [];\n",
       "      root._bokeh_is_loading = undefined;\n",
       "    }\n",
       "  \n",
       "  \n",
       "    \n",
       "    if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
       "      root._bokeh_timeout = Date.now() + 0;\n",
       "      root._bokeh_failed_load = false;\n",
       "    }\n",
       "  \n",
       "    var NB_LOAD_WARNING = {'data': {'text/html':\n",
       "       \"<div style='background-color: #fdd'>\\n\"+\n",
       "       \"<p>\\n\"+\n",
       "       \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
       "       \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
       "       \"</p>\\n\"+\n",
       "       \"<ul>\\n\"+\n",
       "       \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
       "       \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
       "       \"</ul>\\n\"+\n",
       "       \"<code>\\n\"+\n",
       "       \"from bokeh.resources import INLINE\\n\"+\n",
       "       \"output_notebook(resources=INLINE)\\n\"+\n",
       "       \"</code>\\n\"+\n",
       "       \"</div>\"}};\n",
       "  \n",
       "    function display_loaded() {\n",
       "      if (root.Bokeh !== undefined) {\n",
       "        var el = document.getElementById(\"522db170-42ce-4985-8db5-65816e605508\");\n",
       "        if (el != null) {\n",
       "          el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
       "        }\n",
       "      } else if (Date.now() < root._bokeh_timeout) {\n",
       "        setTimeout(display_loaded, 100)\n",
       "      }\n",
       "    }\n",
       "  \n",
       "  \n",
       "    function run_callbacks() {\n",
       "      try {\n",
       "        root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
       "      }\n",
       "      finally {\n",
       "        delete root._bokeh_onload_callbacks\n",
       "      }\n",
       "      console.info(\"Bokeh: all callbacks have finished\");\n",
       "    }\n",
       "  \n",
       "    function load_libs(js_urls, callback) {\n",
       "      root._bokeh_onload_callbacks.push(callback);\n",
       "      if (root._bokeh_is_loading > 0) {\n",
       "        console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
       "        return null;\n",
       "      }\n",
       "      if (js_urls == null || js_urls.length === 0) {\n",
       "        run_callbacks();\n",
       "        return null;\n",
       "      }\n",
       "      console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
       "      root._bokeh_is_loading = js_urls.length;\n",
       "      for (var i = 0; i < js_urls.length; i++) {\n",
       "        var url = js_urls[i];\n",
       "        var s = document.createElement('script');\n",
       "        s.src = url;\n",
       "        s.async = false;\n",
       "        s.onreadystatechange = s.onload = function() {\n",
       "          root._bokeh_is_loading--;\n",
       "          if (root._bokeh_is_loading === 0) {\n",
       "            console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
       "            run_callbacks()\n",
       "          }\n",
       "        };\n",
       "        s.onerror = function() {\n",
       "          console.warn(\"failed to load library \" + url);\n",
       "        };\n",
       "        console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
       "        document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
       "      }\n",
       "    };var element = document.getElementById(\"522db170-42ce-4985-8db5-65816e605508\");\n",
       "    if (element == null) {\n",
       "      console.log(\"Bokeh: ERROR: autoload.js configured with elementid '522db170-42ce-4985-8db5-65816e605508' but no matching script tag was found. \")\n",
       "      return false;\n",
       "    }\n",
       "  \n",
       "    var js_urls = [];\n",
       "  \n",
       "    var inline_js = [\n",
       "      function(Bokeh) {\n",
       "        (function() {\n",
       "          var fn = function() {\n",
       "            var docs_json = {\"80f6a87b-40ad-433c-8497-c817fb0c6db6\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"7a11ef49-b68d-4095-8253-3138f5030acd\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"4dea888d-aed2-47fc-aecf-a6ac177eb98f\",\"type\":\"CrosshairTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"firebrick\"},\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"right\":0.3336898049946803,\"top\":0.7127941042254228},\"id\":\"bc2c2994-cbf8-4996-8709-d7d9dee05ba3\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"callback\":null,\"overlay\":{\"id\":\"a00f33e2-6679-47f9-a852-aa35d637cac8\",\"type\":\"BoxAnnotation\"},\"renderers\":[{\"id\":\"bc200a70-1bda-420d-a96e-7b4c210a939e\",\"type\":\"GlyphRenderer\"}]},\"id\":\"24a037ce-1537-4866-89e9-4f4223fac00e\",\"type\":\"BoxSelectTool\"},{\"attributes\":{\"bottom\":0.7127941042254228,\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"olive\"},\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"right\":0.3336898049946803},\"id\":\"eb23777c-f202-432d-a63f-2b794d0e7827\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"6c56adfc-2772-4621-9d95-83448f721bba\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"text\":\"\\u5c11\\u91cf\\u5927\\u6253\\u6298\",\"text_font_size\":{\"value\":\"10pt\"},\"x\":0.1,\"y\":0.55},\"id\":\"32bc2a05-6aa7-40ca-be07-70e5fda71782\",\"type\":\"Label\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"olive\"},\"left\":0.3336898049946803,\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"top\":0.7127941042254228},\"id\":\"2a0afbd1-139a-4574-ac88-37a1e3a55cb2\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"red\"},\"line_dash\":[8,3],\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"pre\"},\"y\":{\"field\":\"zkl\"}},\"id\":\"e9cfc6dc-eecc-4dd6-90d4-4f87d58a670d\",\"type\":\"CircleX\"},{\"attributes\":{\"plot\":null,\"text\":\"\\u5404\\u4e2a\\u54c1\\u724c\\u6253\\u6298\\u5957\\u8def\\u89e3\\u6790\"},\"id\":\"8f3fab1c-1715-4702-9bb3-f6a484aefa1b\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"1c7524fe-19b9-47bb-815a-b43126dde970\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"2441c9b0-99e2-40ea-bc1e-36bdc6ccfc7e\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"1c7524fe-19b9-47bb-815a-b43126dde970\",\"type\":\"LinearAxis\"},{\"id\":\"4df730ea-1063-45f2-80ee-a6673e0827a7\",\"type\":\"Grid\"},{\"id\":\"2441c9b0-99e2-40ea-bc1e-36bdc6ccfc7e\",\"type\":\"LinearAxis\"},{\"id\":\"80b091a9-fcd6-4064-aab3-0f7b1fc68779\",\"type\":\"Grid\"},{\"id\":\"a00f33e2-6679-47f9-a852-aa35d637cac8\",\"type\":\"BoxAnnotation\"},{\"id\":\"bc200a70-1bda-420d-a96e-7b4c210a939e\",\"type\":\"GlyphRenderer\"},{\"id\":\"c694b55c-2aaa-4607-9dbb-ab4560be37e9\",\"type\":\"Span\"},{\"id\":\"47a117cc-4dfd-4e17-bd7a-c789439e4183\",\"type\":\"Span\"},{\"id\":\"eb23777c-f202-432d-a63f-2b794d0e7827\",\"type\":\"BoxAnnotation\"},{\"id\":\"32bc2a05-6aa7-40ca-be07-70e5fda71782\",\"type\":\"Label\"},{\"id\":\"51fef0e5-43f9-4a77-a180-c015e53cb19f\",\"type\":\"BoxAnnotation\"},{\"id\":\"31e61355-f343-4f9e-9d0a-37d4a9a3b104\",\"type\":\"Label\"},{\"id\":\"bc2c2994-cbf8-4996-8709-d7d9dee05ba3\",\"type\":\"BoxAnnotation\"},{\"id\":\"4bbcd097-293e-48b7-a38c-08331c3a4a4b\",\"type\":\"Label\"},{\"id\":\"2a0afbd1-139a-4574-ac88-37a1e3a55cb2\",\"type\":\"BoxAnnotation\"},{\"id\":\"b6755493-acae-431b-9af7-7aa4bb5b23fe\",\"type\":\"Label\"}],\"title\":{\"id\":\"8f3fab1c-1715-4702-9bb3-f6a484aefa1b\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"b7bebfec-5b69-4b37-9c70-1d0a769dcb09\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"f488fd37-b5b6-4dc2-a578-e3c4ffa51fde\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"6c56adfc-2772-4621-9d95-83448f721bba\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"c5861eb4-4998-470f-a11f-03113495b433\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"2372dc61-f8e9-4881-9d24-ae910680998a\",\"type\":\"LinearScale\"}},\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"56264e94-1e94-40b6-ae63-07bb25c76668\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null},\"id\":\"f488fd37-b5b6-4dc2-a578-e3c4ffa51fde\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"95362d1c-5635-4c4f-9224-c58553400501\",\"type\":\"ColumnDataSource\"}},\"id\":\"5d8ff562-b5e2-41b6-a322-219ef329ccad\",\"type\":\"CDSView\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"e65a9c65-7557-435b-8698-5159a469014b\",\"type\":\"HoverTool\"},{\"id\":\"24a037ce-1537-4866-89e9-4f4223fac00e\",\"type\":\"BoxSelectTool\"},{\"id\":\"7dbdb5f9-a61d-4e3a-b221-109e2e0746ba\",\"type\":\"ResetTool\"},{\"id\":\"44c823fe-002c-4936-8edf-625eae0da160\",\"type\":\"WheelZoomTool\"},{\"id\":\"7a11ef49-b68d-4095-8253-3138f5030acd\",\"type\":\"PanTool\"},{\"id\":\"4dea888d-aed2-47fc-aecf-a6ac177eb98f\",\"type\":\"CrosshairTool\"}]},\"id\":\"b7bebfec-5b69-4b37-9c70-1d0a769dcb09\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"e2ae5f08-eef5-435f-bd75-5a628eafcf1b\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"dimension\":\"height\",\"line_alpha\":{\"value\":0.7},\"line_color\":{\"value\":\"green\"},\"line_dash\":[6,4],\"line_width\":{\"value\":1.5},\"location\":0.3336898049946803,\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"c694b55c-2aaa-4607-9dbb-ab4560be37e9\",\"type\":\"Span\"},{\"attributes\":{\"formatter\":{\"id\":\"ee45a3bb-6e28-4f95-b72a-7630626076c3\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"56264e94-1e94-40b6-ae63-07bb25c76668\",\"type\":\"BasicTicker\"}},\"id\":\"2441c9b0-99e2-40ea-bc1e-36bdc6ccfc7e\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom\":0.7127941042254228,\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"firebrick\"},\"left\":0.3336898049946803,\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"51fef0e5-43f9-4a77-a180-c015e53cb19f\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"text\":\"\\u5927\\u91cf\\u5927\\u6253\\u6298\",\"text_font_size\":{\"value\":\"10pt\"},\"x\":0.3,\"y\":0.55},\"id\":\"31e61355-f343-4f9e-9d0a-37d4a9a3b104\",\"type\":\"Label\"},{\"attributes\":{\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"text\":\"\\u5c11\\u91cf\\u5c11\\u6253\\u6298\",\"text_font_size\":{\"value\":\"10pt\"},\"x\":0.1,\"y\":0.8},\"id\":\"4bbcd097-293e-48b7-a38c-08331c3a4a4b\",\"type\":\"Label\"},{\"attributes\":{\"callback\":null},\"id\":\"c5861eb4-4998-470f-a11f-03113495b433\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"\\u54c1\\u724c\",\"@index\"],[\"\\u6298\\u6263\\u7387\",\"@zkl\"],[\"\\u5546\\u54c1\\u603b\\u6570\",\"@amount\"],[\"\\u53c2\\u4e0e\\u6253\\u6298\\u5546\\u54c1\\u6bd4\\u4f8b\",\"@pre\"]]},\"id\":\"e65a9c65-7557-435b-8698-5159a469014b\",\"type\":\"HoverTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"amount\",\"zkl\",\"pre\",\"index\",\"size\"],\"data\":{\"amount\":[2769,2022,1759,1267,1223,1170,1119,1101,923,874,841,733,678,607,419],\"index\":[\"\\u60a6\\u8bd7\\u98ce\\u541f\",\"\\u4f70\\u8349\\u96c6\",\"\\u6b27\\u83b1\\u96c5\",\"\\u59ae\\u7ef4\\u96c5\",\"\\u7f8e\\u52a0\\u51c0\",\"\\u5a07\\u5170\",\"\\u5170\\u853b\",\"\\u6b27\\u73c0\\u83b1\",\"\\u76f8\\u5b9c\\u672c\\u8349\",\"\\u81ea\\u7136\\u5802\",\"\\u5170\\u829d\",\"\\u7f8e\\u5b9d\\u83b2\",\"\\u7389\\u5170\\u6cb9\",\"\\u8587\\u59ff\",\"\\u871c\\u4e1d\\u4f5b\\u9640\"],\"pre\":{\"__ndarray__\":\"S/Bt/gqzqj+i32wd+s3mP7u/g8ve0NM/Yid2Yid24j9yBTG5gpjcP/D4wwGPP3w/2TMQlY7seT+QclPRPKGmP/S3OK3ZPuE/YhBYObTI5j8cTJHPusGUP4OCgoKCguI/SvPiTySc0j/Wh8b60FivP9pLaC+hveQ/\",\"dtype\":\"float64\",\"shape\":[15]},\"size\":{\"__ndarray__\":\"FK5H4XrEVEAUrkfhelROQML1KFyPYkpA4XoUrkcBQ0C4HoXrUVhCQM3MzMzMjEFAKVyPwvXIQECkcD0K14NAQHA9CtejsDtAuB6F61E4OkB7FK5H4To5QD0K16Nw/TVA16NwPQpXNED2KFyPwjUyQKRwPQrXIylA\",\"dtype\":\"float64\",\"shape\":[15]},\"zkl\":{\"__ndarray__\":\"WpsF4Nj+4z+MGT3GFW/iP//nCQG6t+g/6d8gia1r7D+u9QvfB1XrP5yGUEk3iuk/GIZhGIZh6D92U7V4oTniP4cvb1VX6OA/WZDXqR4C5j9xpr+qZC7cP/bQ09XC9Oo/HleEmIMI6j9b3cCLycHmP13jbX+uV+o/\",\"dtype\":\"float64\",\"shape\":[15]}}},\"id\":\"95362d1c-5635-4c4f-9224-c58553400501\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"a00f33e2-6679-47f9-a852-aa35d637cac8\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"ee45a3bb-6e28-4f95-b72a-7630626076c3\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2372dc61-f8e9-4881-9d24-ae910680998a\",\"type\":\"LinearScale\"},{\"attributes\":{\"data_source\":{\"id\":\"95362d1c-5635-4c4f-9224-c58553400501\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"e9cfc6dc-eecc-4dd6-90d4-4f87d58a670d\",\"type\":\"CircleX\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"a77c24d1-2a1b-42e9-9940-266dbdbdec8b\",\"type\":\"CircleX\"},\"selection_glyph\":null,\"view\":{\"id\":\"5d8ff562-b5e2-41b6-a322-219ef329ccad\",\"type\":\"CDSView\"}},\"id\":\"bc200a70-1bda-420d-a96e-7b4c210a939e\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"3c27d11a-fd98-4773-88b6-4e79e9e09a99\",\"type\":\"BasicTicker\"},{\"attributes\":{\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"text\":\"\\u5c11\\u91cf\\u5927\\u6253\\u6298\",\"text_font_size\":{\"value\":\"10pt\"},\"x\":0.3,\"y\":0.8},\"id\":\"b6755493-acae-431b-9af7-7aa4bb5b23fe\",\"type\":\"Label\"},{\"attributes\":{\"formatter\":{\"id\":\"e2ae5f08-eef5-435f-bd75-5a628eafcf1b\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3c27d11a-fd98-4773-88b6-4e79e9e09a99\",\"type\":\"BasicTicker\"}},\"id\":\"1c7524fe-19b9-47bb-815a-b43126dde970\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"7dbdb5f9-a61d-4e3a-b221-109e2e0746ba\",\"type\":\"ResetTool\"},{\"attributes\":{\"grid_line_dash\":[6,4],\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3c27d11a-fd98-4773-88b6-4e79e9e09a99\",\"type\":\"BasicTicker\"}},\"id\":\"4df730ea-1063-45f2-80ee-a6673e0827a7\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"line_dash\":[8,3],\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"pre\"},\"y\":{\"field\":\"zkl\"}},\"id\":\"a77c24d1-2a1b-42e9-9940-266dbdbdec8b\",\"type\":\"CircleX\"},{\"attributes\":{\"line_alpha\":{\"value\":0.7},\"line_color\":{\"value\":\"green\"},\"line_dash\":[6,4],\"line_width\":{\"value\":1.5},\"location\":0.7127941042254228,\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"47a117cc-4dfd-4e17-bd7a-c789439e4183\",\"type\":\"Span\"},{\"attributes\":{\"dimension\":1,\"grid_line_dash\":[6,4],\"plot\":{\"id\":\"d0e2b68f-421e-48fb-a936-c1245495f473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"56264e94-1e94-40b6-ae63-07bb25c76668\",\"type\":\"BasicTicker\"}},\"id\":\"80b091a9-fcd6-4064-aab3-0f7b1fc68779\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"44c823fe-002c-4936-8edf-625eae0da160\",\"type\":\"WheelZoomTool\"}],\"root_ids\":[\"d0e2b68f-421e-48fb-a936-c1245495f473\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.7\"}};\n",
       "            var render_items = [{\"docid\":\"80f6a87b-40ad-433c-8497-c817fb0c6db6\",\"elementid\":\"522db170-42ce-4985-8db5-65816e605508\",\"modelid\":\"d0e2b68f-421e-48fb-a936-c1245495f473\"}];\n",
       "            \n",
       "            Bokeh.embed.embed_items(docs_json, render_items);\n",
       "          };\n",
       "          if (document.readyState != \"loading\") fn();\n",
       "          else document.addEventListener(\"DOMContentLoaded\", fn);\n",
       "        })();\n",
       "      },\n",
       "      function(Bokeh) {\n",
       "      }\n",
       "    ];\n",
       "  \n",
       "    function run_inline_js() {\n",
       "      \n",
       "      if ((root.Bokeh !== undefined) || (force === true)) {\n",
       "        for (var i = 0; i < inline_js.length; i++) {\n",
       "          inline_js[i].call(root, root.Bokeh);\n",
       "        }if (force === true) {\n",
       "          display_loaded();\n",
       "        }} else if (Date.now() < root._bokeh_timeout) {\n",
       "        setTimeout(run_inline_js, 100);\n",
       "      } else if (!root._bokeh_failed_load) {\n",
       "        console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
       "        root._bokeh_failed_load = true;\n",
       "      } else if (force !== true) {\n",
       "        var cell = $(document.getElementById(\"522db170-42ce-4985-8db5-65816e605508\")).parents('.cell').data().cell;\n",
       "        cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
       "      }\n",
       "  \n",
       "    }\n",
       "  \n",
       "    if (root._bokeh_is_loading === 0) {\n",
       "      console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
       "      run_inline_js();\n",
       "    } else {\n",
       "      load_libs(js_urls, function() {\n",
       "        console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
       "        run_inline_js();\n",
       "      });\n",
       "    }\n",
       "  }(window));\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 用bokeh绘制散点图，x轴为参与打折商品比例，y轴为折扣力度，点的大小代表该品牌参加双11活动的商品总数\n",
    "\n",
    "from bokeh.models.annotations import Span            # 导入Span模块\n",
    "from bokeh.models.annotations import Label           # 导入Label模块\n",
    "from bokeh.models.annotations import BoxAnnotation   # 导入BoxAnnotation模块\n",
    "\n",
    "\n",
    "bokeh_data = result4_data[['zkl','sum','参与打折商品比例']]\n",
    "bokeh_data.columns = ['zkl','amount','pre']\n",
    "bokeh_data['size'] = bokeh_data['amount'] * 0.03\n",
    "source = ColumnDataSource(bokeh_data)\n",
    "# 创建ColumnDataSource数据\n",
    "\n",
    "x_mean = bokeh_data['pre'].mean()\n",
    "y_mean = bokeh_data['zkl'].mean()\n",
    "\n",
    "hover = HoverTool(tooltips=[(\"品牌\", \"@index\"),\n",
    "                            (\"折扣率\", \"@zkl\"),\n",
    "                            (\"商品总数\", \"@amount\"),\n",
    "                            (\"参与打折商品比例\", \"@pre\"),\n",
    "                           ])  # 设置标签显示内容\n",
    "p = figure(plot_width=600, plot_height=600,\n",
    "                title=\"各个品牌打折套路解析\" , \n",
    "                tools=[hover,'box_select,reset,wheel_zoom,pan,crosshair']) \n",
    "# 构建绘图空间\n",
    "\n",
    "p.circle_x(x = 'pre',y = 'zkl',source = source,size = 'size',\n",
    "           fill_color = 'red',line_color = 'black',fill_alpha = 0.6,line_dash = [8,3])\n",
    "p.ygrid.grid_line_dash = [6, 4]\n",
    "p.xgrid.grid_line_dash = [6, 4]\n",
    "# 散点图\n",
    "\n",
    "x = Span(location=x_mean, dimension='height', line_color='green',line_alpha = 0.7, line_width=1.5, line_dash = [6,4])\n",
    "y = Span(location=y_mean, dimension='width', line_color='green',line_alpha = 0.7, line_width=1.5, line_dash = [6,4])\n",
    "p.add_layout(x)\n",
    "p.add_layout(y)\n",
    "# 绘制辅助线\n",
    "\n",
    "bg1 = BoxAnnotation(bottom=y_mean, right=x_mean,fill_alpha=0.1, fill_color='olive')\n",
    "label1 = Label(x=0.1, y=0.55,text=\"少量大打折\",text_font_size=\"10pt\" )\n",
    "p.add_layout(bg1)\n",
    "p.add_layout(label1)\n",
    "# 绘制第一象限\n",
    "\n",
    "bg2 = BoxAnnotation(bottom=y_mean, left=x_mean,fill_alpha=0.1, fill_color='firebrick')\n",
    "label2 = Label(x=0.7, y=0.55,text=\"大量大打折\",text_font_size=\"10pt\" )\n",
    "p.add_layout(bg2)\n",
    "p.add_layout(label2)\n",
    "# 绘制第二象限\n",
    "\n",
    "bg3 = BoxAnnotation(top=y_mean, right=x_mean,fill_alpha=0.1, fill_color='firebrick')\n",
    "label3 = Label(x=0.1, y=0.80,text=\"少量少打折\",text_font_size=\"10pt\" )\n",
    "p.add_layout(bg3)\n",
    "p.add_layout(label3)\n",
    "# 绘制第三象限\n",
    "\n",
    "bg4 = BoxAnnotation(top=y_mean, left=x_mean,fill_alpha=0.1, fill_color='olive')\n",
    "label4 = Label(x=0.7, y=0.80,text=\"少量大打折\",text_font_size=\"10pt\" )\n",
    "p.add_layout(bg4)\n",
    "p.add_layout(label4)\n",
    "# 绘制第四象限\n",
    "\n",
    "show(p)\n",
    "\n",
    "'''\n",
    "结论：\n",
    "少量少打折：包括雅诗兰黛、娇兰、兰蔻、薇姿、玉兰油等共5个品牌。\n",
    "少量大打折：包括悦诗风吟、兰芝、欧珀莱等3个品牌。该类品牌的打折商品较少，但折扣力度较大。\n",
    "大量小打折：包括妮维雅、美宝莲、蜜丝佛陀等3个品牌。该类型有半数以上的商品都参与了打折活动，但折扣力度并不大。\n",
    "大量大打折：包括相宜本草、佰草集、自然堂等三大国产品牌。这些品牌不仅有90%以上的商品参与了折扣活动，而且折扣力度很大。\n",
    "'''"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
